如何在Makefile中为动态命名的汇编文件定义交叉编译规则?
Makefile 交叉编译规则解决方案
针对你需要编译n_mps.S格式汇编文件的需求,以下是正确的动态规则写法,解决通配符失效的问题:
# 定义交叉编译工具链前缀,根据你的实际工具链修改 CROSS_COMPILE ?= arm-none-eabi- AS := $(CROSS_COMPILE)as OBJCOPY := $(CROSS_COMPILE)objcopy # 汇编编译选项,根据你的架构需求添加 ASFLAGS := -mcpu=cortex-m3 -mthumb # 自动识别所有 *_mps.S 文件,生成对应的 *.hex 目标列表 ALL_HEX := $(patsubst %.S,%.hex,$(wildcard *_mps.S)) all: $(ALL_HEX) # 模式规则:将 n_mps.S 编译为 n_mps.elf %_mps.elf: %_mps.S $(AS) $(ASFLAGS) $< -o $@ # 模式规则:将 n_mps.elf 转换为 n_mps.hex %_mps.hex: %_mps.elf $(OBJCOPY) -O ihex $< $@ # 清理生成的中间文件和目标文件 clean: rm -f *_mps.elf *_mps.hex
关键说明:
- 目标列表生成:用
wildcard扫描所有符合*_mps.S的文件,再通过patsubst替换为.hex后缀,给all目标提供明确的构建清单——这是你之前缺失的步骤,直接用%_mps.hex作为all依赖时,Make无法自动枚举所有匹配文件。 - 模式规则匹配:
%作为通配符匹配文件名前缀(比如1、2),分别对应汇编编译和格式转换的两步规则,确保每个源文件对应生成各自的elf和hex文件。 - 工具链适配:修改
CROSS_COMPILE和ASFLAGS为你实际使用的交叉编译工具参数即可。
内容的提问来源于stack exchange,提问作者ex1led
相关产品推荐
相关产品推荐

