2017-01-04 46 views
0

我想知道是否可以在Makefile中自行展开变量。事情到这种效果:在另一个变量中展开变量

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

使用ALL_VARS变量应该导致这样的:

var1 var2 

是这样的可能吗?

预先感谢您

回答

0

你不能在标准品牌中做到这一点。但如果你有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 

但顺序不一定保证。

0

如果变量不遵循一个规律(如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)) 
1

你可以简单地通过使用$(filter ...) builtin function 和特殊变量.VARIABLES,例如相当做到这一点

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

all: 
    @echo $(ALL_VARS) 
+0

嘿......同时打字:) – MadScientist