如何使用外卡获取环境变量?

时间:2014-02-07 00:24:40

标签: makefile gnu-make

我的makefile中设置了几个环境变量,它们都有一个共同的前缀,而其他环境变量没有共享前缀。如何获取具有该前缀的所有变量,并在其前面添加-D,并将这些变量全部设置为新变量?见下文:

ENVIRONMENT VARIABLES
=====================

FOOD_VEGETABLE
FOOD_FRUIT
FOOD_DESSERT
HEAT
GAS

所以我想要一个新变量FOOD_FEATURES来获取所有FOOD_*个变量,并添加一个-D前缀。如果我打印FOOD_FEATURES我会得到这个:

$(warning $(FOOD_FEATURES))

给出

-DFOOD_VEGETABLE -DFOOD_FRUIT -DFOOD_DESSERT

1 个答案:

答案 0 :(得分:0)

如果你有一个足够新版本的GNU make,你可以使用.VARIABLES特殊变量进行这种内省:

FOOD_FEATURES := $(patsubst %,-D%,$(filter FOO_%,$(.VARIABLES)))

我应该指出,这将匹配包含前缀FOO_的所有make变量,而不仅仅是环境变量。如果你真的只想要那些可行但环境变量复杂的环境变量;类似的东西:

FOOD_FEATURES := $(patsubst %,-D%,$(foreach V,$(filter FOO_%,$(.VARIABLES)),$(if $(filter environment,$(origin $V)),$V)))