@, - 和+作为Make中的配方行的前缀做什么?

时间:2010-08-13 13:35:22

标签: makefile gnu-make

在GNU Makefile手册中,mentions这些前缀。

  

如果提供.ONESHELL,则只会检查配方的第一行是否有特殊前缀字符('@',' - '和'+')。

这些前缀做了什么,它们在哪里提到?

2 个答案:

答案 0 :(得分:192)

它们控制标记命令行的make行为:

  • @会抑制执行命令的正常“回显”。

  • -表示忽略已执行命令的退出状态(通常,非零退出状态将停止该部分构建)。

  • +表示在正常执行命令时,在make -n'(或'make -t'或'make -q')下执行此命令。另请参阅GNU Make手册的make§9.3的POSIX规范。

+表示法是事实上(非标准化)机制的(POSIX标准化)概括,其中包含${MAKE}或{{1}的命令行}在$(MAKE)下执行。

make -n在GNU制作手册的§5.2中进行了讨论; §5.5中描述了@; §5.7.1提到了使用- }}。)

答案 1 :(得分:36)

@阻止命令行回显到控制台。您可以使用-s--keep-silent

全局执行此操作

-告诉make继续前进,即使命令由于某种原因失败。您可以通过-i标记(或--ignore-errors)全局执行此操作。

+在你问之前我并不熟悉。尽管我可以告诉它,它否定了-n-t-q的影响,所有这些都基本上告诉make不实际运行命令。因此,前面有+的行无论如何都会运行。

如果您阅读官方Gnu Make手册,则会在Chapter 5中提及它们。在我手册的旧版本中,这是关于“命令”的章节,但是现在,术语du jour似乎是“食谱”。