目錄
- 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)