如何在Makefile中将模式匹配的变量传入列表?
解决Makefile中获取指定前缀变量值列表的问题
要实现获取所有以SUB_TEST(或SUB_)开头的变量值并组成列表,你可以利用Make的内置变量和函数组合完成,具体步骤如下:
核心思路
- 筛选目标前缀的变量名:使用内置变量
$(.VARIABLES)获取所有已定义变量名,再用filter函数筛选出符合前缀规则的变量。 - 遍历变量名并取值:用
foreach遍历筛选后的变量名,通过$($(var))语法获取每个变量的实际值,拼接成空格分隔的列表。
完整示例Makefile
SUB_TEST1=PRJ1 SUB_TEST2=PRJ2 SUB_TEST3=PRJ3 # 方式1:匹配所有以SUB_TEST开头的变量 MYLIST := $(foreach var,$(filter SUB_TEST%,$(.VARIABLES)),$($(var))) # 如果需要匹配所有以SUB_开头的变量,改用下面这行 # MYLIST := $(foreach var,$(filter SUB_%,$(.VARIABLES)),$($(var))) test: @echo "my variables list: $(MYLIST)"
执行结果
运行make test后,输出为:
my variables list: PRJ1 PRJ2 PRJ3
错误写法说明
你之前尝试的两种写法都无法达到目的:
$(wildcard SUB_*):该函数用于匹配文件系统中以SUB_开头的文件,而非Makefile变量,完全不适用当前场景。$(foreach i,$(SUB_%),$(i)):$(SUB_%)不是合法的变量引用,%在此上下文里没有通配符作用,无法匹配变量名。
内容的提问来源于stack exchange,提问作者Ezk13
相关产品推荐
相关产品推荐

