GNU make:仅当目标不是 "clean" 时才包含文件

GNU make: include file only if target is not "clean"

使用 GNU make,我想包含一个文件,except 如果当前目标是 "clean".

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

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

但为此,我需要一个变量,其值是命令行上给出的目标(此处命名为 $(TARGET))。这样的变量似乎不存在,我能理解为什么,因为您可以在命令行上有多个目标,其中一些您可能想要包含文件,而另一些则不需要。实际上,如果除了"clean"之外还有其他目标,则包含该文件就可以了。我目前唯一真正的问题是,当要包含的文件不存在时,Make 将尝试构建它,当您在执行 "clean" 目标时再次删除它时,这是不必要的。

那么,还有其他方法可以实现我想要的吗?

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

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

但是,这通常令人担忧,因为如果您 运行 make clean all 或其他任何内容,即使 all.[= 可能需要包含文件,也不会包含该包含文件。 15=]

如果你真的需要它是可靠的,另一种方法是对你的 "top-level" 参数使用递归,运行在 sub-make.[=15 中一次一个地使用它们=]