Makefile在链接脚本riscv32i.ld修改后不重新编译,如何添加对应依赖?
Makefile链接脚本依赖配置方案
问题根因
链接脚本riscv32i.ld是生成ELF文件的链接阶段核心输入,但当前Makefile的.elf目标依赖仅包含对应的.o目标,链接脚本没有被纳入依赖检测范围,因此修改链接脚本后make不会触发重新链接流程,后续的hex生成步骤也不会执行。
修改步骤
你只需要调整2处配置即可:
- 单独定义链接脚本变量,统一维护引用路径,修改CFLAGS引用该变量
- 给ELF生成规则新增链接脚本作为依赖
修改后的完整Makefile
AS=riscv32-unknown-elf-as CC=riscv32-unknown-elf-gcc OC=riscv32-unknown-elf-objcopy # 新增链接脚本变量定义 LDSCRIPT = riscv32i.ld # 引用变量替换硬编码的脚本名 CFLAGS=-nostdlib -T $(LDSCRIPT) MAKEFLAGS += --silent SOURCES=$(wildcard *.asm) OBJ=$(patsubst %.asm,%.o, $(SOURCES)) ELF=$(patsubst %.asm,%.elf, $(SOURCES)) HEX=$(patsubst %.asm,%.hex, $(SOURCES)) .PHONY: all clean all: $(HEX) $(HEX): %.hex: %.elf $(OC) -O binary $< $@ # 给ELF规则新增链接脚本依赖 $(ELF): %.elf: %.o $(LDSCRIPT) $(CC) $(CFLAGS) -o $@ $< $(OBJ): %.o: %.asm $(AS) -o $@ $< clean: rm -f *.o *.elf *.hex
修改完成后,只要riscv32i.ld文件发生变更,执行make就会自动触发重新链接、生成hex的全流程。
内容的提问来源于stack exchange,提问作者Plasty Grove
相关产品推荐
相关产品推荐

