【发布时间】:2019-01-26 00:40:01
【问题描述】:
考虑以下 makefile 示例:
all:;
varname := a
val = $($(varname)-value)
a-value := AAA
b-value := BBB
$(info val: $(val))
varname := b
$(info val: $(val))
正如预期的那样,在这个 makefile 上运行 make 会导致:
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)
【问题讨论】: