如何通过头文件中的#define修改Makefile输出的Hex文件名?
在Atmel Studio自定义Makefile中给Hex文件名追加固件版本号
1. 从C头文件提取版本号
假设你的固件版本号在version.h中定义为:
#define FW_VERSION "v1.2.3"
在Makefile里添加这段代码,用shell命令自动提取版本号:
# 从version.h中提取FW_VERSION的字符串值 FW_VERSION := $(shell grep -E '^#define FW_VERSION' version.h | sed -E 's/^#define FW_VERSION "([^"]+)"/\1/')
如果你的头文件名不是version.h,或者宏名不是FW_VERSION,直接替换对应的名称即可。
2. 修改Hex文件的输出命名
找到Makefile中定义Hex文件路径的行,通常是类似这样:
HEX_FILE = $(OBJDIR)/$(TARGET).hex
把它改成带版本号的格式:
HEX_FILE = $(OBJDIR)/$(TARGET)_$(FW_VERSION).hex
编译后生成的Hex文件就会变成你的项目名_v1.2.3.hex这种格式。
3. 更新清理目标(可选)
如果你的Makefile有clean目标,记得把带版本号的Hex文件也加入清理列表:
clean: rm -f $(OBJDIR)/*.o $(OBJDIR)/*.d $(OBJDIR)/$(TARGET).elf $(OBJDIR)/$(TARGET)_$(FW_VERSION).hex
嫌每次改版本号都要更新clean命令的话,也可以用通配符匹配所有带版本后缀的Hex文件:
clean: rm -f $(OBJDIR)/*.o $(OBJDIR)/*.d $(OBJDIR)/$(TARGET).elf $(OBJDIR)/$(TARGET)_*.hex
注意事项
- 头文件里的版本号必须用双引号包裹字符串,否则上面的sed命令需要调整匹配规则。
- Windows环境下如果grep或sed命令报错,检查Atmel Studio的AVR工具链路径是否已加入系统环境变量,或者直接写命令的完整路径(比如
$(shell "C:/Atmel/Studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/grep.exe" ...))。
内容的提问来源于stack exchange,提问作者hal
相关产品推荐
相关产品推荐

