3

autotoolsリポジトリにサブパッケージのセットアップがあり、マスターconfigure.acとMakefile.amを使用していくつかの関連プロジェクトが接着されています。

AC_CONFIG_SUBDIRS()マクロを介して簡単に実行できるコンパイル順序とは別に、これらの過度に結合されたサブプロジェクト間に必要なヘッダーとライブラリの場所をエクスポートする必要があります。

--- configure.ac
 |- Makefile.am
 |- subproj1 --- configure.ac
 |            |- Makefile.am
 |            |- src
 |            \- include
 [...]
 |
 \- subprojN --- configure.ac // requires -I${top_srcdir}/subprojX/include and
              |- Makefile.am  // -L${top_srcdir}/subprojX/src
              |- src
              \- include

残念ながら、これらのパッケージを1つとして再グループ化することはできません。AC_SUBST()やmakeのexportコマンドを使用して変数をエクスポートしようとしましたが、役に立ちませんでした。

これらのフラグをすべてのサブプロジェクトMakefileで使用できるようにする唯一の方法は、CPPFLAGSとLDFLAGSを(コマンドラインを介して)ルートconfigure呼び出しに渡すことでした。ただし、これらの値をautotools内に保持する方法があれば、個別のスクリプトを作成する必要はありません。

PS: automakeとプロジェクトの依存関係に似ています

4

2 に答える 2

2

autotoolsは実際にはパッケージ管理システムとして設計されていないため、これは厄介な使用法ですが、サブプロジェクトのビルドツリーの外部の相対パスを参照することは可能です。つまり、subprojN / Makefile.amに、次を追加できます。

AM_CPPFLAGS = -I$(srcdir)/../subprojX/include
AM_LDFLAGS = -L$(srcdir)/../subprojX/lib

このシナリオでは、subprojN / configureがlibsubprojXを見つけようとしている場合、../subprojX/{include,lib}configure.acで実行できるconfigure用にCPPFLAGSとLDFLAGSに追加しない限り、失敗します。

CPPFLAGS="$CPPFLAGS -I${srcdir}/../subprojX/include
LDFLAGS="$LDFLAGS -L${srcdir}/../subprojX/lib"

サブプロジェクトの構成スクリプトが結合されたサブプロジェクトのライブラリをチェックしていない場合は、Makefile.amでLDADDを指定して、必要なライブラリをリンクする方が適切です。

于 2012-04-25T12:14:05.497 に答える
-1

CPPFLAGSとLDFLAGSは、コマンドラインで直接渡すことはほとんどありません(個人的な意見)が、config.siteで設定する必要があります。$ {prefix}/share/config.siteまたは$CONFIG_SITEで割り当てるだけです(つまり、ファイル$ HOME / config.siteで、configureを実行する環境でCONFIG_SITE = $ HOME / config.siteを設定します)。そのスクリプトは、すべてのconfigure呼び出しによって供給されます。「これらの値をautotoolのものの中に保持する」とはどういう意味か正確にはわかりませんが、config.siteを使用することでそれが満たされることに気づきます。LDFLAGSとCPPFLAGSは、configureスクリプトにライブラリの非標準の場所を通知する正しいメカニズムであるため、これらを使用しないソリューションは、autotoolsの通常の範囲外になります。(もちろん、最善の解決策は、ライブラリを標準の場所にインストールして、ツールチェーンが余分な労力をかけずにライブラリを見つけられるようにすることです。おそらく、gccを使用していて、LIBRARY_PATHとCPATHを設定できます。)

于 2012-04-20T13:43:09.693 に答える