在另一个变量中扩展变量
Make expand variables in another variables
我想知道是否可以在 Makefile 中扩展变量本身。达到这个效果的东西:
VAR1 = var1
VAR2 = var2
ALL_VARS = $(VAR*)
使用 ALL_VARS 变量应该得到如下结果:
var1 var2
这样的事情可能吗?
提前致谢
如果您的变量确实遵循规则模式(例如 VAR1
、VAR2
等),您可以为变量的词干生成一个序列并使用 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
虽然不一定保证顺序。
我想知道是否可以在 Makefile 中扩展变量本身。达到这个效果的东西:
VAR1 = var1
VAR2 = var2
ALL_VARS = $(VAR*)
使用 ALL_VARS 变量应该得到如下结果:
var1 var2
这样的事情可能吗?
提前致谢
如果您的变量确实遵循规则模式(例如 VAR1
、VAR2
等),您可以为变量的词干生成一个序列并使用 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
虽然不一定保证顺序。