2014-10-08 36 views
2

有没有办法使用本地Makefile if-else条件,还有它尊重目标特定的变量重新分配?Makefile有条件的不尊重目标特定的变量

Makefile例子:

#!/usr/bin/make 

CONFIG = Debug 

.PHONY: test printme 

test: override CONFIG=Release 
test: printme 
    @echo "Done." 

printme: 
ifeq "$(CONFIG)" "Debug" 
    @echo "should be DEBUG -> $(CONFIG)" 
else 
    @echo "should be RELEASE -> $(CONFIG)" 
endif 

运行make test打印输出如下:

should be DEBUG -> Release 
Done. 

我要找的输出是should be RELEASE -> Release我怎么能做到这一点?我需要使用外壳条件吗?

+2

生成文件条件总是被解释_当生成文件被解析_时。只有在配方被调用_时,才会设置目标特定的变量。 “ifeq”根本不可能考虑目标特定的变量,因为在解析“ifeq”时它们不存在。你必须在你的配方中使用shell条件或'$(if ...)'函数。 – MadScientist 2014-10-08 11:32:43

回答

2

这种行为对我来说似乎是合乎逻辑的:在解析Makefile时,CONFIG被定义为Debugifeq条件使用当时知道的值CONFIG。因此它选择输出“应该调试”的分支ifeq

目标特定变量仅定义为Release,目标为test。其先决条件printme也知道目标特定的变量并输出Release


我可以建议你在命令行上设置变量为make以达到你想要的目的。在调用make时写入的字符并不多,但带来了所有您似乎愿意的内容。

make CONFIG=Release