现在我正在学习如何使用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