递归扩展变量

定义递归扩展变量时,右侧的内容按原样存储。如果存在变量引用,则存储引用本身(而不是变量的值)。等待扩展变量引用,直到实际使用该变量。

x = hello
y = $(x)
# Both $(x) and $(y) will now yield "hello"
x = world
# Both $(x) and $(y) will now yield "world"

在此示例中,y 的定义是递归的。在 $(y) 扩展之前,对 $(x) 的引用不会扩展。这意味着每当 x 的值发生变化时,y 的值也会发生变化。

递归扩展变量是一个功能强大但容易被误解的工具。它们可用于创建类似于模板或函数的构造,甚至可用于自动生成 makefile 的某些部分。它们也可能是难以调试的问题的根源。注意在必要时仅使用递归扩展变量。