如何在Makefile中根据指定索引自动匹配赋值对应对象变量?
解决方案
可以通过Makefile的foreach、call和word函数组合实现需求,完整代码如下:
index := 1 2 3 4 5 objects := one_obj two_obj three_obj four_obj five_obj act_idx := 1 3 # 定义辅助函数,根据索引获取对应对象 define get_obj $(word $(1),$(objects)) endef # 遍历活跃索引,拼接目标对象列表 act_obj := $(foreach idx,$(act_idx),$(call get_obj,$(idx))) all : @echo act_obj = $(act_obj)
关键逻辑说明
word $(1),$(objects):word函数用于从列表中取出第N个元素(N由传入的第一个参数$(1)指定),刚好和index里的数值一一对应,比如传入1就取objects的第一个元素one_obj。define get_obj...endef:封装一个可复用的辅助逻辑,避免重复编写取值代码。foreach idx,$(act_idx),$(call get_obj,$(idx)):遍历act_idx中的每个索引值,逐个调用辅助函数获取对应对象,最终将所有结果拼接成完整的目标列表,赋值给act_obj。
执行make all后,输出结果为:act_obj = one_obj three_obj
内容的提问来源于stack exchange,提问作者sshc
相关产品推荐
相关产品推荐

