2

我在makefile中遇到了一行。该行是:

-include $(wildcard makefile.mk) /dev/null

我不明白包含行中 /dev/null 的目的。是故意的还是错误的?也许他们打算将输出发送到那里?我对makefile还是很陌生,有人可以帮助我理解这一点吗?

4

2 回答 2

2

我认为它用于确保即使通配符完全没有扩展,include也会产生至少一个文件 - /dev/null。也许我可以这样解释......想象一下你有一个这样的假设汇编

INCLUDES=$(wildcard /usr/inc*)
CC -I INCLUDES prog.c -o prog

如果您的(诚然奇怪的)环境在 /usr/include 中没有任何内容,那么您的编译命令将扩展为

CC -I prog.c -o prog

这很可能会出错。因此,/dev/null添加可能会避免这种情况。

我不是说有必要,我只是说我认为这可能是它的目的。类似于程序员使用的时候

grep pattern file /dev/null

而不是更现代的

grep -H pattern file

因为它是一个肯定存在的文件,因此grep将接收两个文件作为参数,因此会告诉你它在其中找到模式的文件的名称 - 就像你指定-H.

另一个例子是formatSolaris 上的命令。它为您提供了所有附加磁盘的可爱列表,然后一直挂在那里直到您选择一个 - 如果您想从脚本中解析列表,我们并不理想。再次在这里,您可以使用 /dev/null ,如果您这样做,它将列出磁盘并退出

format < /dev/null
于 2014-08-09T07:02:12.263 回答
0

这完全没有必要;include如果没有指定任何文件名,则不执行任何操作。

于 2014-07-01T20:52:21.447 回答