在软件的开发过程中,需要经常编译不同版本的软件。有时为了测试某个功能,需要临时添加一个版本;有时为了查找bug,需要不断编译和调试...如果编译的版本多了,可能自己都会混淆。所以,为了更好的识别软件的版本信息,最好的方式就是让工具“操心”这个容易忘记的事情。怎么做呢?让编译器每次编译时,自动添加软件编译的时间戳。
IAR编译器提供内置宏 __DATE__(日期)和 __TIME__(时间),无需手动设置,其值由编译器在编译时自动生成。在代码中声明全局变量存储时间戳:
// version_info.cconst char *buildInfo = "AppVersion 2.3 | Build: " __DATE__ " " __TIME__;
关键问题:若该文件未修改,编译器可能跳过重新编译,导致时间戳未更新。需强制触发每次编译。
强制更新时间戳的配置方法:
在工程选项中配置预编译命令,强制重新编译时间戳源文件:
-
打开工程配置:Project > Options > Build Actions
-
添加Pre-build命令:
cmd /c "del "$OBJ_DIR$\version_info.o""
$OBJ_DIR$:IAR内置变量,指向目标文件输出目录
删除version_info.o后,链接阶段发现文件缺失,重新编译version_info.c,更新宏__DATE__和__TIME__。
这样便可以保证每次编译时间戳都会自动更新了。
使用HEX编辑器hexworkshop便可以查看hex中的时间戳了
0