プログラムの条件式のように(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.la,libbar.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_LIBFOO
と
WANT_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 ...