我在makefile中遇到了一行。该行是:
-include $(wildcard makefile.mk) /dev/null
我不明白包含行中 /dev/null 的目的。是故意的还是错误的?也许他们打算将输出发送到那里?我对makefile还是很陌生,有人可以帮助我理解这一点吗?
我认为它用于确保即使通配符完全没有扩展,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
.
另一个例子是format
Solaris 上的命令。它为您提供了所有附加磁盘的可爱列表,然后一直挂在那里直到您选择一个 - 如果您想从脚本中解析列表,我们并不理想。再次在这里,您可以使用 /dev/null ,如果您这样做,它将列出磁盘并退出
format < /dev/null
这完全没有必要;include
如果没有指定任何文件名,则不执行任何操作。