Makefile中括号$()和花括号$ {}的区别是什么?
语法${var}
和$(var)
调用variables有什么区别吗? 例如,variables的方式将被扩展或任何东西?
没有区别 – 它们的意思完全相同(在GNU Make和POSIX make中)。
我认为$(round brackets)
看起来更加整齐,但这只是个人偏好。
来自GNU make
文档状态的variables引用基础部分 没有区别 :
要replace一个variables的值,写一个美元符号,后面加上括号或大括号中的variables名称:
$(foo)
或${foo}
是variablesfoo 的有效引用 。
事实上,这似乎是相当不同的:
, = , list = a,b,c $(info $(subst $(,),-,$(list))_EOL) $(info $(subst ${,},-,$(list))_EOL)
输出
ab-c_EOL md/init-profile.md:4: *** unterminated variable reference. Stop.
但到目前为止,我只发现这种差异,当$ {…}的variables名称包含自己的逗号。 我首先想到$ {…}扩展逗号不是价值的一部分,但事实certificate我不能这样破解它。 我还是不明白这个…如果有人有解释,我会很高兴知道!
正如已经正确指出的那样,没有什么区别, 但是不要混淆这两种分隔符,因为它会导致像unomadh GNU例子那样的神秘错误。
从函数调用语法的GNU make手册 (强调我的):
[…]如果参数本身包含其他函数调用或variables引用,则对所有引用使用相同types的分隔符是最明智的; 写
$(subst a,b,$(x))
,而不是$(subst a,b,${x})
。 这是因为它更清晰,并且因为只有一种types的分隔符被匹配以find引用的结尾 。