Makefile条件语句不遵守目标特定变量

4

是否有一种方法可以使用本地的Makefile if-else条件,并使它尊重目标特定变量重新赋值?

示例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.

我需要的输出是 应该是 RELEASE -> Release ,我该如何实现呢?需要使用shell条件语句吗?

3
Makefile 条件语句总是在解析 Makefile 时被解释。目标特定变量仅在调用配方时设置。由于目标特定变量在解析 ifeq 时不存在,因此无法基本上考虑它们。您必须使用 shell 条件语句或在配方中使用 $(if ...) 函数。 - MadScientist
1个回答

3
这个行为对我来说很合理:在解析Makefile的时候,CONFIG被定义为Debugifeq条件语句使用它在那时所知道的CONFIG的值。因此,它选择了输出“Should be DEBUG”的ifeq分支。
目标特定变量仅在目标test中被定义为Release。它的前提条件printme也知道目标特定变量并输出Release
我建议您在命令行上将变量设置为make以达到您想要的目的。这不会增加太多在调用make时需要编写的字符数,但可以实现您所需的所有功能。
make CONFIG=Release

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接