我开始认为我已经破坏了GNU make。它的行为似乎变得不可预测。我能因此得到奖励吗?
在命令部分,我一直使用"@"字符来抑制不需要的输出。在一个makefile中,我为一次运行删除了"@",以验证它正在执行我想要的操作。因为我把"@"放回去了,我得到了shell错误:
到底是关于什么的?什么会使"@"不再被视为标准的命令修饰符?
Grrrr !我讨厌那个罐子!(摘自《用GNU make管理项目》封面)
@
字符只在make执行的行开头有效。如果在前一行的末尾有像这样的延续字符,那么make不会执行它,它将由shell执行。shell将不知道如何处理
@
符号,因此你的错误。
另外,如果您使用.ONESHELL
,您应该注意命令前缀将只在配方的第一行有效,之后它将抛出错误,因为所有行都传递给一个shell执行。
同样的规则也适用于其他前缀操作符(-
)