我在尋找一些提示來實現binary --version
,它可以提供關於它編譯的版本的好信息。尋找一種方法來存儲從git repo編譯的二進制版本
該項目使用autotools
構建系統,並存儲在一個充當SVN前端的git倉庫中。
我想什麼有二進制裏面是:
- 編譯時間
- SVN提交這個作爲基礎
- 最後混帳如果可能的最後一次提交該提交ID和時間
- 影響這個特定的二進制文件
我在尋找一些提示來實現binary --version
,它可以提供關於它編譯的版本的好信息。尋找一種方法來存儲從git repo編譯的二進制版本
該項目使用autotools
構建系統,並存儲在一個充當SVN前端的git倉庫中。
我想什麼有二進制裏面是:
你可能想編寫你的源代碼來使用#defined常量版本字符串。然後,您可以通過-DMY_VERSION=...
選項通過構建。這樣可以讓你在代碼中嵌入一個默認值,並且包裹在#ifndef
中,以防萬一!
#ifndef MY_VERSION
#define MY_VERSION 0.0.1-alpha
#endif
print_version() {
printf("my product: %s\n", MY_VERSION);
}
一個很好的方法來處理這在構建過程側,使中間產物生成這簡直是一個生成文件片斷像MY_VERSION = "..."
。這又通過讓您分發已經創建的版本文件的項目來增加冗餘,以便構建不必依賴於SCM的存在。
然後你可以,只要你喜歡創建版本字符串,例如:
echo -n 'MY_VERSION = "' > VERSION_FILE
git describe >> VERSION_FILE
echo "Compiled on $(date)" >> VERSION_FILE
...
echo '"' >> VERSION_FILE
然後在你的主生成文件,包括片段,並添加-DMY_VERSION='"$(MY_VERSION)"'
到構建標誌爲合適的對象。
稍有不同:使生成的文件純粹爲版本字符串,然後將該值拉入makefile中的相應變量。
如果您需要特定git命令的幫助來獲得所需的輸出,請隨時發表評論。儘管如此,git describe
是一款出色的產品。默認輸出是當前提交的最接近的標記祖先,連字符,自標記以來的提交數,連字符和縮寫提交哈希。
需求VERSION_FILE
(見其他答案)在Makefile.am
被標記爲BUILT_SOURCES
也爲它成功地使用myprog_SOURCES
,如果你使用automake。
+1,'git describe'在歷史中至少需要一個標記,或者它保存。 – richq 2010-11-16 20:56:37
@rq:當然。假設你正在標記你的版本 - 你絕對應該這樣做! – Cascabel 2010-11-16 21:13:57