如何在代码中引用git版本

Creative Commons
本作品采用知识共享署名

本文说明如何将git版本号编译入C代码

在实际发布嵌入式软件过程中,为了方便跟踪问题image和代码的对应关系,我们通常希望将编译出来image的代码版本放入image中。对于C代码可以通过cmake达到这个目的。

修改方法

在CMakeLists.txt中添加如下代码, 就会将git的版本号放入一个GIT_HASH的宏

1
2
3
4
5
6
7
exec_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对于的代码版本。