GNU make:仅当目标不是“干净”时才包含文件

时间:2019-05-20 15:57:59

标签: gnu-make

使用GNU make,如果当前目标为“干净”,我想包含一个文件,

也就是说,我要执行以下操作:

ifneq($(TARGET),clean)
-include somefile.txt
endif

但是,为此,我需要一个变量,其值是在命令行上给定的目标(这里称为$(TARGET))。这样的变量似乎不存在,我可以理解为什么,因为您可能在命令行上有多个目标,其中某些目标可能要包含文件,而其他目标则不希望。实际上,如果除“ clean”以外还有其他目标,则包括该文件也可以。我目前唯一真正的问题是,当要包含的文件不存在时,Make会尝试构建它,而当您要在执行“干净”目标时再次删除它时,这是不必要的。

那么,还有另一种方法可以实现我想要的吗?

1 个答案:

答案 0 :(得分:1)

您可以使用MAKECMDGOALS。像这样使用它来处理命令行上的多个参数:

ifeq (clean,$(filter clean,$(MAKECMDGOALS)))
-include somefile.txt
endif

但是,这常常让人感到困惑,因为如果您运行make clean all或其他方法,即使all可能需要包含文件,也不会包括在内。

如果您确实需要可靠的另一种方法,则是对“顶级”参数使用递归,然后在子命令中一次运行一次。