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

Makefile配置问题:如何将.o文件输出至指定子文件夹?

正确配置Makefile实现.o文件归类

以下是修正后的Makefile,能把所有.o文件存入myObj子文件夹,同时在根目录生成myprog.out:

OBJDIR := myObj

# 把所有目标文件统一放到myObj目录下
OBJS := $(addprefix $(OBJDIR)/, main.o otherfile.o)

run: myprogram
	./myprog.out

myprogram: $(OBJS)
	gcc -o myprog.out $^

# 确保myObj目录存在,避免编译报错
$(OBJDIR):
	mkdir -p $@

# 从.c文件生成myObj下的.o文件,明确指定输出路径
$(OBJDIR)/%.o: %.c | $(OBJDIR)
	gcc -c $< -o $@

# 可选:添加清理规则,一键删除生成文件
clean:
	rm -rf $(OBJDIR) myprog.out

关键修改点说明

  • 更新依赖路径:原来的myprogram依赖根目录的main.o、otherfile.o,现在改成依赖myObj下的对应文件,让Make使用我们定义的模式规则
  • 自动创建输出目录:新增$(OBJDIR)目标,用mkdir -p确保目录存在;模式规则里的| $(OBJDIR)保证先建目录再编译
  • 指定编译输出:模式规则里的gcc命令加上-o $@,把编译结果直接输出到myObj文件夹($@就是当前规则要生成的myObj/xxx.o文件)
  • 简化链接命令:用$^自动引用所有依赖的.o文件,不用手动逐个写,后续加新文件更方便

原修改无效的原因

  1. 依赖项没改:你还是让myprogram依赖根目录的.o,Make会触发内置的编译规则生成根目录的.o,完全没用到你写的$(OBJDIR)/%.o规则
  2. 编译没指定输出:gcc -c $<默认在当前目录生成.o,不会自动放到myObj,必须用-o明确指定输出路径

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 15:46:19