10

私が取り組んでいるプロジェクトの実行可能ファイルに最新の mercurial 変更セットを記録して、ユーザーがバグのある動作について苦情を言ったときに、使用しているバージョンを追跡できるようにしたいと考えています。私の実行可能ファイルの一部は Python であり、その他はコンパイルされた C です。これを自動化する方法はありますか、または私が参照できるソリューションを示すプロジェクトを教えてもらえますか?

私は自分のプロジェクトで autoconf を使用しています...ソリューションが簡単になる場合に備えて。

ありがとう!

セットジャンプ

4

3 に答える 3

6

これを行う一般的な方法は、m4_esyscmd を使用することです。たとえば、autoconf は、git リポジトリからバージョン番号を生成し、次のように AC_INIT を呼び出す build-aux でスクリプトを配布します。

AC_INIT([GNU Autoconf], m4_esyscmd([build-aux/git-version-gen .tarball-version]),
  [bug-autoconf@gnu.org])

多くの場合、スクリプトを配布せずに次のような簡単なことを実行できます。

AC_INIT([パッケージ名], m4_esyscmd([git describe --dirty | tr -d '\012']),
  [バグレポートアドレス])

git-describe の代わりに、バージョン番号を生成する任意のコマンドを使用します。重要な詳細の 1 つは、末尾に改行があってはならないことです (したがって、git-describe に続く tr )。

この手法の主な欠点は、autoconf を実行したときにのみバージョン番号が生成されることです。

于 2010-08-31T08:04:39.210 に答える
5

これを に追加configure.ac:

AM_CONDITIONAL([IS_HG_REPO], [test -d "$srcdir/.hg"])

次の行を に追加しますMakefile.am

if IS_HG_REPO
AM_CPPFLAGS = -DHGVERSION="\"$(PACKAGE) `hg parents --template 'hgid: {node|short}'`\""
else
AM_CPPFLAGS = -DHGVERSION=PACKAGE_STRING
endif

リリース tarball からビルドする場合、これはまたはHGVERSIONの形式の文字列として定義されます。APPNAME hgid: 24d0921ee4bdAPPNAME VERSION

于 2010-09-01T12:46:27.873 に答える
1

make を使用したバージョン管理に関する wiki ページを参照してください

于 2010-08-29T01:08:52.297 に答える