Makefile失败,因为-include指令

时间:2015-08-10 06:07:43

标签: makefile

来自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. 与第1版一样,虽然-included(sincluded)makefile无法重新制作,但应该简单地忽略,正如上面引用的文档中明确指出的那样。

  2. 但更令人质疑的是,Make:

    给出了误导性的调试信息
      

    制作:***没有规则来制作目标' x'。停止。

    因为,是的,制定此目标的规则。实际上,此目标(x)的每个双冒号文件都有一条规则。

    所以,即使Make想要"失败"这个构建(为什么?),它应该 NOT 输出垃圾!

1 个答案:

答案 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