在另一个变量中扩展变量

Make expand variables in another variables

我想知道是否可以在 Makefile 中扩展变量本身。达到这个效果的东西:

VAR1 = var1
VAR2 = var2
ALL_VARS = $(VAR*)

使用 ALL_VARS 变量应该得到如下结果:

var1 var2

这样的事情可能吗?

提前致谢

如果您的变量确实遵循规则模式(例如 VAR1VAR2 等),您可以为变量的词干生成一个序列并使用 foreach。像这样:

NUM ?= 2

GENERATE=$(or $(and $(word $(1), $(2)), $(2)), $(call GENERATE, $(1), $(2) $(words 0 $(2))))
sequence=$(call GENERATE, $(NUM))

VAR1 = var1
VAR2 = var2
ALL_VARS = $(foreach n, $(sequence), $(VAR$n))
$(warning $(ALL_VARS))

您可以相当简单地使用 $(filter ...) builtin function 和特殊变量 .VARIABLES,例如

VARX = var1
VARY = var2
ALL_VARS = $(foreach var,$(filter VAR%,$(.VARIABLES)),$($(var)))

all: 
    @echo $(ALL_VARS)

标准品牌无法做到这一点。但是如果你有 GNU make,并且你的变量名匹配一个 (make) 模式,你可以使用:

VAR1 = var1
VARFoo = varfoo
VAR-big = var-big

ALL_VARS = $(foreach V,$(filter VAR%,$(.VARIABLES)),$($V))

$(info ALL_VARS = $(ALL_VARS))

应该让你:

var1 varfoo var-big

虽然不一定保证顺序。