-include指令应该忽略错误。但是由于错误导致停止

时间:2015-08-20 05:39:58

标签: makefile gnu-make

来自docs

  

如果希望make简单地忽略不存在的makefile   或者无法重新编译,没有错误消息,请使用-include指令   而不是include,像这样:

     

- 包括FILENAMES ......

     

除了没有错误之外,它在各方面都像include   (甚至不是警告)如果任何文件(或任何先决条件)   任何FILENAMES)都不存在或无法重新制作。



给出以下makefile:

$(shell rm -rf x foo)

-include mkfile


all: ;

mkfile : x ;

x : foo ;

.INTERMEDIATE : x



正在运行,我得到:

make: *** No rule to make target 'foo', needed by 'x'.  Stop.



那么,根据上面的文档,我们使用-include(不是include)指令,不应该只是忽略这个错误吗?

1 个答案:

答案 0 :(得分:0)

make: *** No rule to make target 'foo', needed by 'x'.  Stop.
  

根据上述文档,我们使用make(非-include)指令不应该include 忽略此错误吗?

不!您对文档的解释是错误的。

--include的使用会忽略任何成功的文件,即在它之后。它会忽略任何文件!

您选择了部分文档并在其上构建解释。

  

如果任何FILENAMES(或任何FILENAMES的任何先决条件)不存在或无法重新制作,则没有错误(甚至没有警告)。

以上引用适用于成功-include的文件,如

  

- 包括FILENAMES ......

适用于所有文件。

-

include的演示

为了证明这一点,我们可以用一个简单的例子作为

$(shell rm -rf mkfile)

-include mkfile

all: 
    echo '$@'

.PHONY: all

在此实例中,或者至少在make的第二次传递之前,文件mkfile不存在。如果我们要执行此操作,输出将是

$ make
echo 'all'
all

此处make忽略了mkfile不存在且继续处理makefile而没有警告或错误的事实。 这正是文档所述的内容。

相反,如果我们在-之前删除include,那么makefile就像

一样
$(shell rm -rf mkfile)

include mkfile

all: 
    echo '$@'

.PHONY: all

执行此操作会产生输出

$ make
makefile:3: mkfile: No such file or directory
make: *** No rule to make target 'mkfile'.  Stop.

现在make已停止,因为存在错误,文件mkfile不存在且我们尚未使用-include