部分扩展递归扩展变量

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)