在makefile中,作为规则目标的唯一短划线是什么意思?

时间:2014-08-15 12:25:41

标签: makefile

我看到一个包含

的文件.missing-syscalls.d
-:  /home/ckim/MVP/snake_linux_3.3.mvpe/include/linux/kconfig.h \
 include/generated/autoconf.h \
 /home/ckim/MVP/snake_linux_3.3.mvpe/arch/sparc/include/asm/types.h \
 include/asm-generic/int-ll64.h \
 /home/ckim/MVP/snake_linux_3.3.mvpe/arch/sparc/include/asm/bitsperlong.h \
 include/asm-generic/bitsperlong.h \
 /home/ckim/MVP/snake_linux_3.3.mvpe/arch/sparc/include/asm/unistd.h

我知道.d文件仅用于显示依赖性。但是' - '作为目标?

2 个答案:

答案 0 :(得分:1)

makefile中命令之前的连字符用于抑制错误并继续而不是像这样失败:

clean:
        -rm -f *.o

makefile中包含语法的方法与抑制错误消息的方式相同,否则如果文件不可用则会出现错误消息:

-include $(SRC:%.c=%.d)

我认为.missing-syscalls.d文件的使用方式相同,忽略了它试图包含的不存在的头文件。

答案 1 :(得分:0)

这是一个错误(来自某个自动化过程出错)以及-的文字定位,它定义了一些额外的先决条件(对于我无法想象的目标)很可能真的跑了。)

或者那是为了确保这些文件不被视为中间文件,以防万一某些规则链导致它们将其视为中间文件。

请参阅http://www.gnu.org/software/make/manual/make.html#Chained-Rules以供参考。

  

通常,如果文件中提到的话,文件不能是中间文件   makefile作为目标或先决条件。但是,您可以明确标记   将文件列为特殊的先决条件的文件作为中间文件   目标.INTERMEDIATE。即使提到文件,这也会生效   明确地以其他方式。