来自docs:
如果你想要'制作'简单地忽略不存在的makefile 或者无法重新制作,没有错误信息,请使用' -include'指示 而不是'包括',像这样:
-include FILENAMES...
这就像' include'在各方面,除了没有错误 (甚至不是警告)如果任何文件(或任何先决条件) 任何FILENAMES)都不存在或无法重新制作。
现在,我的makefile的第1版是:
all:
@:
-include x
x:: phony
true
x:: phony
false
.PHONY: phony
跑步,我明白了:
true
false
makefile:11: recipe for target 'x' failed
make: *** [x] Error 1
糟糕!难道它不应该被忽略 - 包含(包含)makefile,不能重做没有错误吗?
而且,我的makefile的第2版读取:
all:
@:
-include x
x:: phony
false
x:: phony
true
.PHONY: phony
跑步,我明白了:
false
make: *** No rule to make target 'x'. Stop.
对于以下内容,这简直太过分了:
与第1版一样,虽然-included(sincluded)makefile无法重新制作,但应该简单地忽略,正如上面引用的文档中明确指出的那样。
但更令人质疑的是,Make:
给出了误导性的调试信息制作:***没有规则来制作目标' x'。停止。
因为,是的,是制定此目标的规则。实际上,此目标(x
)的每个双冒号文件都有一条规则。
所以,即使Make想要"失败"这个构建(为什么?),它应该 NOT 输出垃圾!
答案 0 :(得分:0)
这里的问题不是include
没有被忽略。它没有指定正确的规则来制作x
。
如果您运行下面的简单makefile
,即使文件x
不存在且无法包含,也会看到它正常运行。
-include x
.PHONY: all
all:
@echo 'Ignoring include error'
我已在下面提供了makefile
的更正版本。 注意:我如何使用.PHONY
并删除了x
的重复规则。
all:
@:
-include x
.PHONY: x
x:: phony
true