linux - 为什么要在 makefile 中包含/dev/null?

标签 linux makefile include dev-null

我在 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

另一个示例是 Solaris 上的 format 命令。它为您提供了所有附加磁盘的可爱列表,但然后卡在那里直到您选择一个 - 如果您想从脚本解析列表,这并不理想。同样,您可以使用/dev/null,它会列出磁盘并退出(如果您这样做)

format < /dev/null

关于linux - 为什么要在 makefile 中包含/dev/null?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24519067/

相关文章:

linux - 如何在没有密码提示的情况下从脚本写入/etc/sudoers 文件?

带有假的 Makefile 通配符(静态规则?)

javascript - 脚本 "src"标签问题

Eclipse 中的 Android,合并/包含嵌套的 XML 非布局资源

linux - 如何让 "select"在单列中显示选项?

c# - 单声道上的 ASP.NET - 找不到方法 PageAsyncTask

linux - 我如何将星号回显到输出

c++ - 使用 makefile 和 g++ 链接到静态库

c - 如何使用 Autotools 生成的 Makefile 在 Vim 中编译单个 C 文件

android - 在android中隐藏包含的布局