GameBoy游戏项目Makefile配置:输出文件至子目录求助
解决GameBoy项目编译输出到子目录的Makefile调整方案
我之前也碰到过一模一样的需求——谁也不想让项目根目录被一堆编译产物占得乱糟糟的!咱们可以通过调整Makefile的目标路径和依赖规则,轻松把所有输出文件(.o、.gb这些)放到指定子目录里,比如build/。下面是具体的修改步骤和完整示例:
关键改动思路
- 统一管理输出目录:先定义一个变量来指定输出目录,后续所有路径都基于这个变量修改,方便后续调整
- 自动创建目录:Make不会自动生成目录,所以要加一个规则确保编译前目录已存在
- 改写所有编译规则:把原来直接输出到根目录的目标,全部改成输出到子目录下
- 更新清理逻辑:确保能准确删掉子目录里的所有编译产物
修改后的完整Makefile
# 定义输出目录,可根据需求改成你想要的名字(比如output/) BUILD_DIR = build CC = ../../../bin/lcc -Wa-l -Wl-m -DUSE_SFR_FOR_REG # 把最终的.gb文件路径指向输出目录 BINS = $(BUILD_DIR)/new.gb # 先确保输出目录存在,再执行编译 all: $(BUILD_DIR) $(BINS) # 创建输出目录的规则,-p参数确保目录不存在时自动创建,存在时不报错 $(BUILD_DIR): mkdir -p $@ # 编译.c文件到输出目录下的.o文件 $(BUILD_DIR)/%.o: %.c $(CC) -c -o $@ $< # 生成汇编文件到输出目录 $(BUILD_DIR)/%.s: %.c $(CC) -S -o $@ $< # 编译.s文件到输出目录下的.o文件 $(BUILD_DIR)/%.o: %.s $(CC) -c -o $@ $< # 链接生成.gb文件到输出目录 $(BUILD_DIR)/%.gb: $(BUILD_DIR)/%.o $(CC) -o $@ $< clean: # 方式1:删除输出目录下的指定类型产物 rm -f $(BUILD_DIR)/*.o $(BUILD_DIR)/*.lst $(BUILD_DIR)/*.map $(BUILD_DIR)/*.gb # 方式2:彻底清空整个输出目录(更省心),可以替换上面的行 # rm -rf $(BUILD_DIR) # 自定义链接规则:写入0x80到header的0x143位置 $(BUILD_DIR)/new.gb: $(BUILD_DIR)/new.o $(CC) -Wl-yp0x143=0x80 -o $@ $<
小说明
- 如果你不想用
build/作为输出目录,只需要修改BUILD_DIR变量的值就行,所有规则会自动适配新路径 - 执行
make后,所有编译出来的.o、.gb等文件都会存放在build/目录里,根目录会保持清爽 - 清理时用
make clean,按照你选的方式删掉对应产物或者整个输出目录
这样调整后就能完美解决你之前遇到的问题啦!
内容的提问来源于stack exchange,提问作者Matt Horgan
相关产品推荐
相关产品推荐

