Makefile中的$ {foobar}和$ {foobar)有什么区别?

时间:2019-12-17 10:54:26

标签: bash makefile

在bash脚本中,我通过shellcheck了解到,通过"${foobar}"访问var是最佳实践。在Makefile中,有时会使用${foobarr},有时会看到$(foobar)。两者之间有什么区别,因为我在官方文档中看到两者混在一起,所以Makefile中的最佳做法是什么?

2 个答案:

答案 0 :(得分:2)

两个变量都被接受,据我所知,所有功能都可以使用,甚至GNU Make中的函数调用。

关于最佳做法,我不记得曾经以某种方式看到过建议。 $(...)似乎更常见,但我不记得与${...}有关的任何问题。

请注意,如果您想将$传递给shell进行解释,可能是因为您想扩展Makefile中不可用的shell变量,则必须将它加倍:$$

答案 1 :(得分:1)

它们之间绝对没有区别。它们在所有方面都受到相同对待。使用您喜欢的任何一种。要考虑的一些事情:

  • make变量不是shell变量。在处理make变量时,使用$(...)可能会有所帮助,作为视觉提醒您正在使用make变量。
  • 有时在嵌套变量和/或函数时,使用不同的花括号以保持清晰度可能会有所帮助(尽管make计数会打开/关闭花括号,并且不会造成混淆)。
  • $(shell ...)函数中编写复杂的脚本时,有时使用${shell ...}可以避免与特殊的shell功能(例如旧式case语句)发生冲突。