@, -和+作为Make中食谱行前缀的作用是什么?

在GNU Makefile手册中,它提到这些前缀。

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

这些前缀的作用是什么?它们在哪里被提到?

59659 次浏览

@防止命令行回显到控制台。你可以全局使用-s--keep-silent

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

在你问之前,我不熟悉。据我所知,它否定了-n-t-q的效果,所有这些基本上都告诉make不实际运行命令。因此,前面带有+的行无论如何都会被运行。

如果你阅读官方的Gnu Make手册,它们都在第五章中提到。在我的旧手册中,有一章是关于“命令”的,但现在流行的术语似乎是“食谱”。

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

  • @抑制所执行命令的正常“回声”。

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

  • +表示当命令不正常执行时,“在make -n下执行此命令”(或“make -t”或“make -q”)。参见POSIX规范中的make§9.3的GNU Make手册。

+符号是事实上的(非标准化)机制的(posix标准化)泛化,其中包含${MAKE}$(MAKE)的命令行在make -n下执行。

(@在GNU Make手册的§5.2中讨论;-§5.5中描述;而§5.7.1提到了+的使用。)