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

如何通过头文件中的#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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 23:13:11