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

如何使用Makefile隐式规则构建不在Makefile同级目录下的文件

嗨,这问题我熟!你只需要把config/file3.c也纳入你的构建目标列表里就行,给你两种实用的方案:

方案1:手动指定目标文件

这种方式适合文件数量固定的场景,直接把所有需要编译的.o文件列出来:

# 定义所有需要生成的目标文件,包含src和config目录下的
OBJS = src/file1.o src/file2.o config/file3.o

# 最终的可执行文件(这里命名为myapp,你可以改成自己需要的名字)
myapp: $(OBJS)
	$(CC) -o $@ $^

# 你原有的隐式规则保持不变
%.o: %.c
	$(CC) -c -o $@ $<

原理很简单:当Make需要构建config/file3.o时,它会自动找到对应的config/file3.c,然后套用你写的隐式规则完成编译,最后把所有.o文件链接成可执行文件。

方案2:自动扫描所有源文件

如果以后可能会新增更多.c文件,用这个更省心,借助Make的wildcard和字符串替换功能自动收集所有源文件:

# 自动扫描src和config目录下的所有.c文件
SRCS = $(wildcard src/*.c config/*.c)
# 把所有.c后缀替换成.o,得到对应的目标文件列表
OBJS = $(SRCS:.c=.o)

myapp: $(OBJS)
	$(CC) -o $@ $^

%.o: %.c
	$(CC) -c -o $@ $<

这样不管你在src或config目录下加多少.c文件,Make都会自动识别并编译,不用手动修改目标列表啦。

内容的提问来源于stack exchange,提问作者Ahmed Adel

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 16:24:09