2017-01-04 21 views
0

Мне было интересно, можно ли самим изменять переменные в Makefile. Что-то по этому поводу:Сделать переменные расширения в других переменных

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

Использование переменной ALL_VARS должно привести к чему-то вроде:

var1 var2 

ли что-то подобное возможно?

Спасибо заранее

ответ

0

Вы не можете сделать это в стандартном исполнении. Но если у вас есть GNU сделать, и ваши имена переменных совпадают с (грим) шаблон, вы можете использовать:

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

Если вы переменные действительно следовать шаблону регулярного (например, 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)) 
1

Вы можете сделать это довольно просто с помощью $(filter ...) builtin function и специальную переменную .VARIABLES, например

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

all: 
    @echo $(ALL_VARS) 
+0

Хех ... печатать в то же время :) – MadScientist