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

GameBoy游戏项目Makefile配置:输出文件至子目录求助

解决GameBoy项目编译输出到子目录的Makefile调整方案

我之前也碰到过一模一样的需求——谁也不想让项目根目录被一堆编译产物占得乱糟糟的!咱们可以通过调整Makefile的目标路径和依赖规则,轻松把所有输出文件(.o、.gb这些)放到指定子目录里,比如build/。下面是具体的修改步骤和完整示例:

关键改动思路

  1. 统一管理输出目录:先定义一个变量来指定输出目录,后续所有路径都基于这个变量修改,方便后续调整
  2. 自动创建目录:Make不会自动生成目录,所以要加一个规则确保编译前目录已存在
  3. 改写所有编译规则:把原来直接输出到根目录的目标,全部改成输出到子目录下
  4. 更新清理逻辑:确保能准确删掉子目录里的所有编译产物

修改后的完整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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 03:40:01