递归扩展变量
定义递归扩展变量时,右侧的内容按原样存储。如果存在变量引用,则存储引用本身(而不是变量的值)。等待扩展变量引用,直到实际使用该变量。
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 的某些部分。它们也可能是难以调试的问题的根源。注意在必要时仅使用递归扩展变量。