將git版本資訊編譯程序式

2021-09-25 12:10:03 字數 1661 閱讀 7962

有時候我們需要在程式裡列印git版本資訊,方便原始碼追蹤。有兩種方式,一種是通過命令列使用git生成版本資訊相關標頭檔案,編譯的時候引用這個標頭檔案。另乙個種是生成git版本資訊巨集,原始碼裡直接呼叫,這裡以第二種為例敘說。編譯環境使用cmake,在linux平台,其他環境也可以參照。

在cmake檔案裡定義如下:

execute_process(command	git log -1 --format="%h" working_directory $ output_variable git_version)

execute_process(command git log -1 --format="%ct" working_directory $ output_variable git_time)

string (regex replace "[\n\t\r\"]" "" git_time $)

execute_process(command date -d@$ +"%y-%m-%d %h:%m:%s" working_directory $ output_variable git_datetime)

execute_process(command date +"%y-%m-%d %h:%m:%s" working_directory $ output_variable build_datetime)

# 對得到的結果進行處理,尤其注意 \n,\t,\r之類的特殊字元,在cmake時沒問題,但是生成的.cmake檔案有問題,導致make出錯。

string (regex replace "[\n\t\r]" "" git_version $)

string (regex replace "[\n\t\r]" "" git_datetime $)

string (regex replace "[\n\t\r]" "" build_datetime $)

message("git版本:" $ "; git日期:" $ "; 編譯日期:" $)

# 增加編譯選項,把巨集匯入原始碼

add_definitions( -dgit_version=$)

add_definitions( -dgit_datetime=$)

add_definitions( -dbuild_datetime=$)

然後就可以在原始碼中直接列印git版本資訊了:

要注意的幾點:

1、cmake中的execute_process使用了$,這個巨集要求先定義project(輸出程式名稱),不然會導致未定義。

2、add_definitions時網上說需要使用雙引號包裹變數,但實際測試時發現不能使用雙引號,直接使用變數即可。

3、working_directory $ 中的$可能需要根據實際情況進行相應的替換,以便能正確獲取git相關資訊。

4、將整數轉換成日期的命令

execute_process(command date -d@$ +"%y-%m-%d %h:%m:%s" working_directory $ output_variable git_datetime)
會導致程式退出後出現錯誤:

暫時不知道解決方法,介意的建議不轉換,直接列印時間戳

Go編譯時加入版本資訊

go 編譯時可通過ldflags動態的為程式裡某個變數賦值,我們可以利用這個特性來達到將go的資訊和git 的commit 資訊編譯到我們的二進位制檔案中。package main import fmt os var githash string buildtime string goversion...

Go 編譯時加入版本資訊

go 編譯時可通過ldflags動態的為程式裡某個變數賦值,我們可以利用這個特性來達到將 go 的資訊和 git 的 commit 資訊編譯到我們的二進位制檔案中。package main import fmt os var githash string buildtime string gover...

刪除隱藏版本資訊 版本回退 git神技 版本穿梭

本篇文章主要談談版本的管理,比如版本回滾,修改的管理刪除等。暫存區檔案刪除 我們都清楚,我們要更新版本庫首先git add乙個檔案,這時候這個檔案所做的修改就會新增到暫存區,但是這時候如果我們發現新增錯檔案了,我們如何刪除暫存區的檔案呢?這裡一般來說有三種情況存在 只清除暫存區的某個檔案 在git暫...