部分扩展递归扩展变量
Partially expanding recursively expanded variables
考虑以下 makefile 示例:
all:;
varname := a
val = $($(varname)-value)
a-value := AAA
b-value := BBB
$(info val: $(val))
varname := b
$(info val: $(val))
正如预期的那样,运行 make
在这个 makefile 上的结果是:
val: AAA
val: BBB
由于 val
是一个 recursively expanded variable,它的扩展发生在引用时(即 $(val)
)。
在定义变量val
时,变量a-value
还没有定义。因此,将 val
定义为 simply expanded variable(即使用 :=
而不是 =
):
val := $($(varname)-value)
导致 $($(varname)-value)
立即扩展 为空字符串,进而导致空 $(val)
.
我想知道是否有办法立即扩展val
的定义中的varname
,但是延迟 结果的扩展,直到 val
被 引用 ,就好像 val
实际上在上面的 makefile 中定义为:
val = $(a-value)
嗯,你可以这样做:
simplevar := $(varname)
val = $($(simplevar)-value)
考虑以下 makefile 示例:
all:;
varname := a
val = $($(varname)-value)
a-value := AAA
b-value := BBB
$(info val: $(val))
varname := b
$(info val: $(val))
正如预期的那样,运行 make
在这个 makefile 上的结果是:
val: AAA
val: BBB
由于 val
是一个 recursively expanded variable,它的扩展发生在引用时(即 $(val)
)。
在定义变量val
时,变量a-value
还没有定义。因此,将 val
定义为 simply expanded variable(即使用 :=
而不是 =
):
val := $($(varname)-value)
导致 $($(varname)-value)
立即扩展 为空字符串,进而导致空 $(val)
.
我想知道是否有办法立即扩展val
的定义中的varname
,但是延迟 结果的扩展,直到 val
被 引用 ,就好像 val
实际上在上面的 makefile 中定义为:
val = $(a-value)
嗯,你可以这样做:
simplevar := $(varname)
val = $($(simplevar)-value)