0

すべてがコアモジュールに依存するたくさんの (例えば 200 近くの) モジュールがあるとします。すべてAutotoolsを使用しています。

core モジュールは、従属モジュールが既にさまざまなことに使用している core.m4 ファイルをインストールします。

すべての依存関係には、いくつかのスクリプトを生成してインストールするための install-data-local ルールにもいくつかの行があります。

core_stuffdir=$(prefix)/share/core/stuff/

install-data-local:
        generate-stuff stuff.xml
        test -d $(DESTDIR)$(core_stuffdir) || mkdir $(DESTDIR)$(core_stuffdir)
        stuff=`xmllint --xpath '//stuff[@install="yes"]/@name' stuff.xml`; \
            $(INSTALL_DATA) $$stuff $(DESTDIR)$(core_stuffdir); \
            rm $$stuff
        …
        $(INSTALL_DATA) other-module-specific-stuff …
        …

現在、約 200 ファイルにわたって冗長に複製されているこれらの 5 行を削除し、代わりに core.m4 で行を定義したいと思います。依存関係は、次のようなことSOMEVAR: somevalue(または同様に短いもの、最悪でも install-data-local の 1 行のこと) を言って、make install 中にそれらの行を実行できるようにする必要があります。

これらの行を core.m4 で定義し、Makefile.am で利用できるようにする良い方法はありますか? ネット上で同様の例を見つけることができません。

今考えられる唯一の解決策は、m4 が install-data-local から呼び出すことができるシェル スクリプトを吐き出すことですが、それが最善の (または最も自動ツール的な) 方法であるかどうかはわかりません。

fragment.amまたは、コア モジュールからautomake ファイルを配布する簡単な方法はありますか? (これは、たとえば Python のコンパイル規則が定義されている方法のようです。)

4

1 に答える 1

2

掘り下げた後 、同様の問題の解決策があるhttp://thread.gmane.org/gmane.comp.sysutils.automake.general/5704/focus=5708を見つけまし た(そこに記載されている AC_CONFIG_FILES ソリューションを取得できませんでした働きます)。

したがって、core.m4 は CORE_MKINCLUDE を定義するようになりました。

AC_DEFUN([CORE_MKINCLUDE],
[
  AC_SUBST_FILE(core_include)
  core_include=$srcdir/core_include.am

  cat >$srcdir/core_include.am <<EOF

core_stuffdir=\$(prefix)/share/core/stuff/
install-stuff:
        generate-stuff stuff.xml
        test -d \$(DESTDIR)\$(core_stuffdir) || mkdir \$(DESTDIR)\$(core_stuffdir)
        stuff=\`xmllint --xpath '//stuff@<:@@install="yes"@:>@/@name' stuff.xml`; \\
                \$(INSTALL_DATA) \$\$stuff \$(DESTDIR)\$(core_stuffdir); \\
                rm \$\$stuff

EOF

])

すなわち。目標はファイル core_include.am に出力され、独自の名前が付けられます。各モジュールの configure.ac 呼び出しCORE_MKINCLUDE、および各 Makefile.am には

@core_include@
install-data-local: install-stuff

少なくとも改善。

于 2014-03-24T14:47:13.860 に答える