From bf7bd929d7c0ba13568dfd84c27d0bf2f2ca5be8 Mon Sep 17 00:00:00 2001 From: yankun Date: Tue, 3 Feb 2026 17:39:04 +0800 Subject: [PATCH] fix Makefile --- Makefile | 43 ++++++++++++++++++++++++------------------- 1 file changed, 24 insertions(+), 19 deletions(-) diff --git a/Makefile b/Makefile index 90bc28d..d9dbec9 100644 --- a/Makefile +++ b/Makefile @@ -141,6 +141,17 @@ TARGET = demo # 链接脚本 LDSCRIPT = STM32F429IGTX_FLASH.ld +####################################### +# 对象文件列表 +####################################### +# 生成对象文件列表(所有对象文件放在build根目录,避免路径问题) +OBJECTS = $(addprefix $(BUILD_DIR)/,$(notdir $(C_SOURCES:.c=.o))) +OBJECTS += $(addprefix $(BUILD_DIR)/,$(notdir $(ASM_SOURCES:.s=.o))) + +# 设置vpath以查找源文件 +vpath %.c $(sort $(dir $(C_SOURCES))) +vpath %.s $(sort $(dir $(ASM_SOURCES))) + ####################################### # 默认目标 ####################################### @@ -152,40 +163,34 @@ all: $(BUILD_DIR)/$(TARGET).elf $(BUILD_DIR)/$(TARGET).hex $(BUILD_DIR)/$(TARGET # 创建构建目录 $(BUILD_DIR): - mkdir -p $@ + @mkdir -p $@ -# C源文件编译 -$(BUILD_DIR)/%.o: %.c Makefile | $(BUILD_DIR) +# C源文件编译(匹配完整路径) +$(BUILD_DIR)/%.o: %.c Makefile @echo "编译: $<" - $(CC) -c $(CFLAGS) -Wa,-a,-ad,-alms=$(BUILD_DIR)/$(<:.c=.lst) $(C_INCLUDES) $(C_DEFS) $(DEPFLAGS) -o $@ $< + @mkdir -p $(dir $@) + @$(CC) -c $(CFLAGS) -Wa,-a,-ad,-alms=$(BUILD_DIR)/$(<:.c=.lst) $(C_INCLUDES) $(C_DEFS) $(DEPFLAGS) -o $@ $< -# 汇编源文件编译 -$(BUILD_DIR)/%.o: %.s Makefile | $(BUILD_DIR) +# 汇编源文件编译(匹配完整路径) +$(BUILD_DIR)/%.o: %.s Makefile @echo "汇编: $<" - $(AS) -c $(ASFLAGS) $(C_INCLUDES) $(C_DEFS) -o $@ $< + @mkdir -p $(dir $@) + @$(AS) -c $(ASFLAGS) $(C_INCLUDES) $(C_DEFS) -o $@ $< # 链接 $(BUILD_DIR)/$(TARGET).elf: $(OBJECTS) Makefile @echo "链接: $@" - $(CC) $(OBJECTS) $(LDFLAGS) -o $@ + @$(CC) $(OBJECTS) $(LDFLAGS) -o $@ @echo "输出大小:" - $(SZ) $@ + @$(SZ) $@ # 生成HEX文件 $(BUILD_DIR)/$(TARGET).hex: $(BUILD_DIR)/$(TARGET).elf | $(BUILD_DIR) - $(HEX) $< $@ + @$(HEX) $< $@ # 生成BIN文件 $(BUILD_DIR)/$(TARGET).bin: $(BUILD_DIR)/$(TARGET).elf | $(BUILD_DIR) - $(BIN) $< $@ - -####################################### -# 对象文件列表 -####################################### -OBJECTS = $(addprefix $(BUILD_DIR)/,$(notdir $(C_SOURCES:.c=.o))) -vpath %.c $(sort $(dir $(C_SOURCES))) -OBJECTS += $(addprefix $(BUILD_DIR)/,$(notdir $(ASM_SOURCES:.s=.o))) -vpath %.s $(sort $(dir $(ASM_SOURCES))) + @$(BIN) $< $@ ####################################### # 清理