我想知道是否可以在Makefile中自行展开变量。事情到这种效果:在另一个变量中展开变量
VAR1 = var1
VAR2 = var2
ALL_VARS = $(VAR*)
使用ALL_VARS变量应该导致这样的:
var1 var2
是这样的可能吗?
预先感谢您
我想知道是否可以在Makefile中自行展开变量。事情到这种效果:在另一个变量中展开变量
VAR1 = var1
VAR2 = var2
ALL_VARS = $(VAR*)
使用ALL_VARS变量应该导致这样的:
var1 var2
是这样的可能吗?
预先感谢您
你不能在标准品牌中做到这一点。但如果你有GNU做,你的变量名匹配(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
但顺序不一定保证。
如果变量不遵循一个规律(如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)
嘿......同时打字:) – MadScientist