如何在Makefile中用单个函数批量格式化列表项(替代addprefix+addsuffix)
问题
我定义了如下变量:
ITEMS = item1 item2
希望通过类似如下的函数调用:
ITEMS_AFTER := $(fmt prefix{}suffix, $(ITEMS))
得到结果:
prefixitem1suffix prefixitem2suffix
请问该如何实现?我希望找到比组合使用addprefix与addsuffix更简洁的方法。
解决方法
方法一:自定义fmt函数
完全贴合你想要的调用语法,在Makefile里定义这个自定义函数即可:
define fmt $(foreach item,$(2),$(subst {},$(item),$(1))) endef # 使用示例 ITEMS = item1 item2 ITEMS_AFTER := $(call fmt,prefix{}suffix,$(ITEMS)) # 验证输出 all: @echo $(ITEMS_AFTER)
这个fmt函数会遍历第二个参数中的每个元素,把第一个参数里的{}占位符替换为当前元素,最终拼接成你需要的结果。
方法二:直接用patsubst(最简洁)
如果不想自定义函数,用Make内置的patsubst模式替换函数可以一步到位,写法更紧凑:
ITEMS = item1 item2 ITEMS_AFTER := $(patsubst %,prefix%suffix,$(ITEMS)) # 验证输出 all: @echo $(ITEMS_AFTER)
%作为通配符匹配每个item,直接将每个item替换为prefix+item+suffix的形式,比嵌套addprefix和addsuffix更直观。
内容的提问来源于stack exchange,提问作者yoyobara
相关产品推荐
相关产品推荐

