在实际发布嵌入式软件过程中,为了方便跟踪问题image和代码的对应关系,我们通常希望将编译出来image的代码版本放入image中。对于C代码可以通过cmake达到这个目的。
修改方法
在CMakeLists.txt中添加如下代码, 就会将git的版本号放入一个GIT_HASH的宏1
2
3
4
5
6
7exec_program(
"git"
${CMAKE_CURRENT_SOURCE_DIR}
ARGS "log -1 --format=%H "
OUTPUT_VARIABLE VERSION_HASH )
add_definitions( -DGIT_HASH="${VERSION_HASH}" )
exec_program就是调用一个外部命令,将外部命令的结果保存到变量VERSION_HASH中。也就是说你可以修改ARGS获取想要格式的版本号。也可以修改调用的外部命令用到svn上也可以。
add_definitions就是将变量VERSION_HASH变为字符串付给宏GIT_HASH
如果git当前的版本号是a6734562253以上相当于是1
#define GIT_HASH "a6734562253"
引用
在C代码中直接引用GIT_HASH宏即可,例如可以在main()最开始加入1
PRINTF("Version %d.%d-%s\r\n", VERSION_MAJOR, VERSION_MINOR, VERSION_GIT);
这样运行image有问题时,一看打印就知道该image对于的代码版本。