You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 07:20:33