更多 GNU 制作:什么可能导致 shell(默认 = /bin/sh)开始说"@mkdir: not found"?



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

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


到底是关于什么的?什么会使"@"不再被视为标准的命令修饰符?

Grrrr !我讨厌那个罐子!(摘自《用GNU make管理项目》封面)

@字符只在make执行的行开头有效。如果在前一行的末尾有像这样的延续字符,那么make不会执行它,它将由shell执行。shell将不知道如何处理@符号,因此你的错误。

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

同样的规则也适用于其他前缀操作符(-)

最新更新