2017-12-08 19 views
0

autotools build-systemに実行可能なプロジェクトprogがあります。このプログラムは、autotoolsプロジェクトでもあるlibfooとリンクしています。Autotools:オプションでコンパイルしてサードパーティのライブラリとリンクします

私は以前libfooインストールにリンクのどちらかを選択する、または設定するには、パッケージ内に同梱されてlibfooソースツリーにコンパイル(静的リンク)とリンク自由を(progをコンパイルしたい)私のユーザーを与えたいですそれが重要な場合

libfoothird-partyディレクトリには)libtoolpkg-configを使用しています...

理想的には、これはいくつかのautoconfの引数を使って行うことになります。

./configure --with-local-libfoo 

./configure --with-system-libfoo 

の質問はどのようにlibfooprog前(第2の場合には)コンパイルするとどのように正しいリンクフラグを提供するために、ビルドシステムに伝えることですか?

答えて

1

libfooはAutotoolsプロジェクトでもあり、そのコピーはメインプロジェクト内に配布されているので、サブプロジェクトとして設定するのは当然でしょう。ここの主要なAutoconfマクロはAC_CONFIG_SUBDIRSです。調べてlibfooパッケージはトップレベルconfigureスクリプトを含むディレクトリのサブディレクトリlibfoo/にあった場合はこのように、トップレベルconfigure.acその場合、

AC_CONFIG_SUBDIRS([libfoo]) 

を使用し、トップレベルのconfigureスクリプトは、今libfooのconfigureを実行します自動的にスクリプトを実行し、受け取ったすべてのオプション(libfooにのみ意味のあるものを含む)を渡します。さらに、トップレベルスクリプトの--helpオプションは、それ自身とlibfooのオプションの両方を表示します。あなたは--with-*引数でそれを条件付きにすることができます(ただ1つで、2つの異なるものを使用しないでください)。

Automake側では、Automake conditionalsconditional subdirectoriesを参照してください。 --with-system-libfooなどによって制御される条件付きの条件文を使用して、適切なリンクオプションのセットを選択し、makeがlibfooパッケージに再帰するかどうかを判断できます。 libfooの独自のコピーを作成するときは、メインプログラムのリンクフラグに-static-libtool-libsオプションを含めると便利です。

最後のビットは、ビルド時にローカルlibfooがメインプログラムの横にシステムからインストールされないようにしています。私はlibfooのビルドシステムを調整する必要のない良い解決策を思いついたわけではありません。 libfoo.laを便利なライブラリ(lib_LTLIBRARIESなどではなくnoinst_LTLIBRARIESという名前)に切り替えると、実際にはlibfooサブパッケージのビルドターゲットがインストールされているものからnoinst_に切り替わります。

関連する問題