現在我正在學習如何使用makefile並且在規則內部遇到變量問題。我的目標是解析包含其他文件名稱的文件,將其保存在變量中,並將該變量用作「目標模式」以在每個文件上運行規則。這裏是我的問題的一個簡單例子(我正在寫入文件名以簡化它)。如何在規則外使用makefile變量
當我運行此:
variable = file1.txt file2.txt file3.txt
run : $(variable)
$(variable): %.txt:
echo File is [email protected]
我得到以下,這正是我想要的:
$ make run
echo File is file1.txt
File is file1.txt
echo File is file2.txt
File is file2.txt
echo File is file3.txt
File is file3.txt
的問題是我想通過解析一個文件來定義variable
,我想該文件是一個依賴項,因爲如果它不存在,我將在makefile中使用另一個規則。所以,當我在這樣的規則(我知道現在還有沒有從我的回聲)定義變量:
target1 :
$(eval variable = file1.txt file2.txt file3.txt)
echo $(variable)
run : $(variable)
$(variable): %.txt:
echo File is [email protected]
我得到如下:
$ make target1
echo file1.txt file2.txt file3.txt
file1.txt file2.txt file3.txt
而且這樣的:
$ make run
make: Nothing to be done for `run'.
所以我的問題是如何定義一個規則中的變量,並將其用於某些行:
$(variable): %.txt:
echo File is [email protected]
我試過閱讀手冊和谷歌搜索,但我無法弄清楚這一點。我也想象有一些簡單的答案我錯過了。非常感謝你的幫助! :)
由於make方式的原因,它不起作用:FIRST根據需要解析整個makefile,擴展變量等。那麼讓開始爲過時的規則運行食譜。所以,當make運行包含'eval'的'target1'的配方時,makefile的其餘部分已經被解析並且'variable'已經被擴展(到空字符串)。 – MadScientist