ChatGPT解决这个技术问题 Extra ChatGPT

@、- 和 + 作为 Make 中配方行的前缀有何作用?

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

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

这些前缀有什么作用,它们在哪里提到?


J
Jonathan Leffler

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

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

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

+ 表示“在 make -n 下执行此命令”(或“make -t”或“make -q”),当命令未正常执行时。另请参见 make 的 POSIX 规范以及 GNU Make 手册的第 9.3 节。

+ 表示法是 de facto(非标准化)机制的(POSIX 标准化)概括,其中包含 ${MAKE}$(MAKE) 的命令行在 make -n 下执行。

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


T
T.E.D.

@ 防止命令行回显到控制台。您可以使用 -s--keep-silent 在全局范围内执行此操作

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

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

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