次: , 前: Libtool Libraries, 上: A Shared Library


7.3.3 Libtoolライブラリのビルドの条件分岐

プログラムの条件式のように(see Conditional Programs),ライブラリの 条件付きビルドにも主に二つの方法があります.Automakeの条件式を使用する 方法と,AutoconfのAC_SUBSTを使用する方法です.

気を付けるべき重要な実装の詳細は,ライブラリがインストールされる場所が libtoolにとって重要だということです.それは,-rpathオプションを 使用してリンク時に示されるものが必要になります.

Automakeの実行時にインストール先のディレクトリが分かっているライブラリ に対し,Automakeは自動的に適切な`-rpath'オプションをlibtoolに供給 します.これは,lib_LTLIBRARIESのように,インストール可能な _LTLIBRARIESに明示的にリストアップされているライブラリの場合で す.

しかし,configure時に決定される(EXTRA_LTLIBRARIESに記述されてい る)ライブラリに対して,Automakeは最終的なインストールディレクトリが分 かりません.そのようなライブラリに対して,適切な`_LDFLAGS'変数に `-rpath'オプションを手動で追加する必要があります.

以下の例で,これら二つの手法の違いを説明します.

この例は,$(WANTEDLIBS)AC_SUBSTされている変数で, ./configure時にlibfoo.lalibbar.la,その両方,ま たは空で設定されます.$(WANTEDLIBS)lib_LTLIBRARIESに書 かれていますが,Automakeは,それがlibfoo.laまたは libbar.laに関連付けされることを,これら二つのライブラリに対する リンクルールが作成されるときまで推測することが不可能です.このため,特 に-rpath引数を提供する必要があります.

     EXTRA_LTLIBRARIES = libfoo.la libbar.la
     lib_LTLIBRARIES = $(WANTEDLIBS)
     libfoo_la_SOURCES = foo.c ...
     libfoo_la_LDFLAGS = -rpath '$(libdir)'
     libbar_la_SOURCES = bar.c ...
     libbar_la_LDFLAGS = -rpath '$(libdir)'

これは,同じMakefile.amで,WANT_LIBFOOWANT_LIBBARという名前のAutomakeの条件式を使用しているものがあり ます.Automakeは,両方のライブラリをインストールする場合,結局 $(libdir)になることが明らかなので,-rpathの設定を自分で 計算することが可能です.

     lib_LTLIBRARIES =
     if WANT_LIBFOO
     lib_LTLIBRARIES += libfoo.la
     endif
     if WANT_LIBBAR
     lib_LTLIBRARIES += libbar.la
     endif
     libfoo_la_SOURCES = foo.c ...
     libbar_la_SOURCES = bar.c ...