使用GNU make,如果当前目标为“干净”,我想包含一个文件, 。
也就是说,我要执行以下操作:
ifneq($(TARGET),clean)
-include somefile.txt
endif
但是,为此,我需要一个变量,其值是在命令行上给定的目标(这里称为$(TARGET))。这样的变量似乎不存在,我可以理解为什么,因为您可能在命令行上有多个目标,其中某些目标可能要包含文件,而其他目标则不希望。实际上,如果除“ clean”以外还有其他目标,则包括该文件也可以。我目前唯一真正的问题是,当要包含的文件不存在时,Make会尝试构建它,而当您要在执行“干净”目标时再次删除它时,这是不必要的。
那么,还有另一种方法可以实现我想要的吗?
答案 0 :(得分:1)
您可以使用MAKECMDGOALS
。像这样使用它来处理命令行上的多个参数:
ifeq (clean,$(filter clean,$(MAKECMDGOALS)))
-include somefile.txt
endif
但是,这常常让人感到困惑,因为如果您运行make clean all
或其他方法,即使all
可能需要包含文件,也不会包括在内。
如果您确实需要可靠的另一种方法,则是对“顶级”参数使用递归,然后在子命令中一次运行一次。