1

Foo という autotools ベースのパッケージがあります。歴史的な理由から (他の理由はありますか?)、これにはサブパッケージ subBar が含まれています。

Foo -|
     |- configure.ac
     |- Makefile.am
     |- subBar -|
                |- configure.ac
                |- Makefile.am

subBar の configure.ac は十分に複雑なので、避けられればいじりたくありません。一方、subBar は Foo と緊密に統合されているため、別のバージョン番号を保持する意味がありません。

Foo のバージョン (AC_INIT から) を subBar に伝播する方法はありますか? 明白なこと:

subBar/configure.ac:
  AC_INIT([subBar], [$(VERSION)], ...)

循環参照のため機能しません。

何か案は?

4

2 に答える 2

2

マニュアルは可能な解決策を提供します:

AC_INIT の引数は静的でなければなりません。つまり、シェルの計算、引用符、または改行があってはなりませんが、それらは M4 によって計算できます...バージョン管理システムにコミットします (実際、Autoconf は、リリース間で作成された開発ツリーのすべてのビルドに対して、まさにそれを行います)。

それautoconf自体がこれを独自に使用するためconfigure.ac

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

バージョン文字列を取得するには、これを独自のシステム コマンドまたはシェル スクリプトに置き換える必要があります。たとえば、トップレベルのファイル.foo-versionを " MAJOR.MINOR" で呼び出し、 から借用するとgit-version-gen、次のようになります。m4_esyscmd([tr -d '\n' < ../.foo-version])

もちろん、トップレベルのパッケージ../で同じコマンドを使用できると思います。./m4 はシステム コマンドを呼び出しているため、バージョン文字列は好きな方法で自由に取得できます。

于 2013-06-10T18:27:42.193 に答える