1

我开始认为我已经破坏了 GNU make。它的行为似乎变得不可预测。我会因此获得奖励吗?

在我的命令部分,我一直在使用“@”字符来抑制不需要的输出。在一个 makefile 中,我删除了 '@' 运行一次,以验证它是否在执行我想要的操作。因为我把 '@' 放回去了,我得到了 shell 错误:
@mkdir: not found那

到底是怎么回事?什么可以使“@”不再被识别为标准命令修饰符?

呸!我讨厌那个锅!(来自使用 GNU make 管理项目的封面)

4

1 回答 1

0

@字符仅在 make 执行的行首有效。如果你有延续字符,比如\ 结束上一行,这不会被make执行,它会被shell执行。外壳不知道如何处理该@标志,因此您的错误。

此外,如果您使用.ONESHELL,您应该注意命令前缀仅在配方的第一行有效,之后它将引发错误,因为所有行都传递给一个 shell 执行。

相同的规则也适用于其他前缀运算符 ( -)。

于 2016-12-30T12:51:18.593 回答