2017-04-20 64 views
0

我該如何爲autoconf項目分配動態的,基於git的版本號? 的Autoconf需要一個靜態的字符串參數如何在autoconf管理的項目中插入基於Git的版本?

AC_INIT([Title],[version],[name]) 

AC_INIT文檔中說,人們可以使用M4提供一個基於 外殼版本。 M4超出了我的肯定。我想我的版本的軟件 根據該命令

version=`git describe --abbrev=7 --dirty --always --tags` 

的結果,這將產生類似4.6.6-alpha07-9-ga3e01a8

我可能不明白高級別的答案。我需要一個解決方案,如「剪切 並將其粘貼到您的autoconf.ac和/或acinclude.m4中」。

任何幫助表示讚賞。

回答

1

如何:

AC_INIT([Title], [m4_esyscmd_s([git describe --abbrev=7 --dirty --always --tags])]) 

應該爲你工作。

+0

謝謝。它部分工作,然後導致配置失敗。很難弄清楚爲什麼。還在調查...... –

+0

@CharlieZender:在'm4_esyscmd'周圍移除'''',並通過'tr'運行其結果以去掉尾隨的換行符:AC_INIT([Title],m4_esyscmd([git describe - abbrev = 7 --dirty --always --tags | tr -d'\ n']))'。 –

+0

這個工程!配置使用我想要的版本字符串完成。驚訝的更多項目不使用基於Git的版本標籤。不知道我應該把這個答案標記爲正確的,除非/直到ldav1s的答案被編輯... –

1

只是運行在m4_esyscmdgit describeAC_INIT版本仍有待改進的幾件事情:

  • 如果要構建一個壓縮包DIST使用什麼版本? 這裏根本沒有git describe有用的輸出。

  • 如果您剛剛提交了更改,要使用哪個版本? 您是否更新git describe, 的configure版本,或只是繼續使用現有版本進行構建?

對於我自己的包(如ndim-utils),我已經解決了這些問題,通過

  • 有一個特殊的build-helpers/package-version腳本確定的版本從version-stamp使用(和一些更)文件如果找到,或git describeconfigure.acAC_INITm4_esyscmd該腳本。

  • 有一個特殊build-helpers/package-version.mk從頂層Makefile.am生成一個version-stamp文件DIST壓縮包包括,檢查當前git describe輸出無論從什麼configure不同存儲了,和一些其他的東西。

  • 有一個GNUmakefile.ingit describe在必要時更新存儲在configure內部版本。

而且我可能已經忘記了解決方案中解決的一些問題。

我不確定這些腳本是否準備好複製到您的項目中,但我想在此提及還有其他一些事項需要考慮。