目录
- 1. 引言
- 2. 实现过程
-
- 2.1 工程目录规划
- 2.2 c程序文件
- 2.3 CMakeLists.txt
- 2.4 GitVersion.cmake文件
- 2.5 BuildNumber.cmake文件
1. 引言
在项目构建的时候,我们经常会希望能够将git提交的分支信息和提交号(commitid)以及当前版本发布的tag信息作为版本号自动构建到程序里面,以便后续能够快速定位所运行的程序所定影的git源码的版本,从而快速发现和定位问题。
本文利用cmake的自动构建能力,来实现以下信息的自动提取并构建到程序中:
- 当前代码的git 分支名
- 当前代码的git 提交号(commitid)
- 当前代码的tag所设置的版本号
- 当前代码的构建时间
- 当前代码的构建号(buildno)
以下以c语言构成为例,展示了利用cmake自动生成config.h文件,将以上信息自动集成到c语言工程代码中的过程。
2. 实现过程
2.1 工程目录规划
如下图:
其中有c语言源码都放在工程根目录下面,当然,对于比较大型的工程,可以对源码目录进行更细地拆分和规划,本demo只有一个test.c和config.h的c源码文件,因此源码目录从简。
创建一个cmake目录,用来存放自定义的cmake模块文件。
创建一个build目录,用来存放cmake运行所产生的输出文件。
2.2 c程序文件
test.c 文件的内容如下:
#include <stdio.h>
#include "config.h"
int main()
{
printf("version: %s\n", PROJECT_VERSION);
printf("commit: %s\n", GIT_COMMITID);
printf("branch: %s\n", GIT_BRANCH)