来自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
)指令,不应该只是忽略这个错误吗?
答案 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
。