为何有这个需求?
做嵌入式软件开发的人对于手工维护版本号总是心有抵触。因为代码提交很频繁,如果每次提交都需要手动修改子版本号,不胜其烦。而且难免会有遗漏的时候,这样版本号就失去了意义,并不能指明其与代码的真实对应关系。因为即使有版本号,也不知道是否就是预期的版本。
有什么办法能解决这个痛点呢?
答案是有!——使用编译日期与时间替代子版本号。
实现办法
C语言编译器生成目标代码时,会生成常量字符串:__DATE__ 、__TIME__,分别表示编译的日期与时间。将这两个字符串作为版本号的一部分,每次编译时都会自动变化,这样就达到了版本号与代码编译版本唯一对应的目的。
例如,如下代码通过调试打印接口输出版本号及设备UID等信息:
printf("\r\n******************************************************************\r\n");
printf(" 欢迎使用XXXX流量计算机\r\n");
printf(" 固件编译时间:%s %s\r\n", __DATE__, __TIME__);
printf(" UID: %08X %08X %08X\r\n", UID[0], UID[1], UID[2]);
printf("******************************************************************\r\n");
问题就这么轻松愉快地解决了?没有这么简单!
多编译运行几次