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

Makefile中$(src:%.c=%.o)保留.s文件的原因及解决方法

问题解答

为什么替换后仍保留src/p1.s?

Makefile里的$(src:%.c=%.o)是模式替换,规则很明确:只对变量列表中匹配%.c模式的元素做替换,不匹配的元素会原封不动留在结果里。

你的src变量包含src/p1.c和src/p1.s两个文件:

  • src/p1.c符合%.c的匹配规则,被替换成src/p1.o
  • src/p1.s不匹配该模式,所以直接保留,最终输出就同时有两个文件。

如何仅获取src/p1.o文件?

核心思路是先过滤出变量里所有的.c文件,再做替换,常用两种写法:

写法1:拆分过滤+模式替换

src = src/p1.c src/p1.s
# 先筛选出所有.c文件
C_FILES = $(filter %.c,$(src))
# 再对筛选结果做替换
STRIPPED_FILE = $(C_FILES:%.c=%.o)

all:
    @echo $(STRIPPED_FILE)

写法2:用patsubst组合过滤

patsubst是更通用的替换函数,和模式替换效果一致,写法更紧凑:

src = src/p1.c src/p1.s
STRIPPED_FILE = $(patsubst %.c,%.o,$(filter %.c,$(src)))

all:
    @echo $(STRIPPED_FILE)

执行后输出就是src/p1.o,只会保留替换后的目标文件。

内容的提问来源于stack exchange,提问作者Eranna Yadav

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 04:46:12