前: Alternative, 上: Directories
GNUビルド・システムでは,パッケージを任意の深さに入れ子状にすることが 可能です.これは,独自のconfigure,Makefileなどがある他 のパッケージを埋め込んだパッケージが可能になることを意味します.
これらのその他のパッケージは,親パッケージのサブディレクトリに存在する
ようにすべきです.それらは,他の普通のディレクトリと同様に
SUBDIRS
にリストアップする必要があります.しかし,サブパッケージ
のMakefileは,親のconfigureではなく,独自の
configureスクリプトで出力するようにすべきです.これはAutoconfマ
クロのAC_CONFIG_SUBDIRS
を使用して達成します
(see AC_CONFIG_SUBDIRS).
サブディレクトリのhand/にある入れ子状のパッケージhand
ラ
イブラリとリンクする,arm
プログラムのパッケージ例は,以下のよう
になります.
arm
のconfigure.acです.
AC_INIT([arm], [1.0]) AC_CONFIG_AUX_DIR([.]) AM_INIT_AUTOMAKE AC_PROG_CC AC_CONFIG_FILES([Makefile]) # Call hand's ./configure script recursively. AC_CONFIG_SUBDIRS([hand]) AC_OUTPUT
arm
のMakefile.amです.
# Build the library in the hand subdirectory first. SUBDIRS = hand # Include hand's header when compiling this directory. AM_CPPFLAGS = -I$(srcdir)/hand bin_PROGRAMS = arm arm_SOURCES = arm.c # link with the hand library. arm_LDADD = hand/libhand.a
さて,hand
のhand/configure.acです.
AC_INIT([hand], [1.2]) AC_CONFIG_AUX_DIR([.]) AM_INIT_AUTOMAKE AC_PROG_CC AC_PROG_RANLIB AC_CONFIG_FILES([Makefile]) AC_OUTPUT
そしてそのhand/Makefile.amです.
lib_LIBRARIES = libhand.a libhand_a_SOURCES = hand.c
make dist
がトップレベルのディレクトリで実行されるとき,
handサブディレクトリだけでなく,arm
コードも含むアーカイ
ブarm-1.0.tar.gzを作成します.このパッケージは,通常のパッケー
ジと同じように,いつもの./configure && make && make install
でビ
ルドしインストールすることが可能です(hand
サブパッケージは,処理
中にビルドとインストールがなされます.).
make dist
がhand
ディレクトリで実行されるとき,それ自身が
含まれているhand-1.2.tar.gzアーカイブを作成します.他のパッケー
ジに埋め込まれているのですが,別々に使用することも可能です.
AC_CONFIG_AUX_DIR([.])
機能の目的は,AutomakeとAutoconfに追加ス
クリプトをカレントディレクトリで探すように強制することです.例えば,二
つのinstall-shのコピーがあって,一つはトップレベルのarm
パッケージ,もう一つはhand
パッケージのhand/サブディレク
トリにあるということを意味します.
歴史的なデフォルトは,これらの追加スクリプトを直接の親と更にその親のディ
レクトリで探します.そのため,AC_CONFIG_AUX_DIR([.])
行が
hand/configure.acからなくなると,サブパッケージはarm
パッ
ケージの追加スクリプトを共有します.これは若干サイズが大きくなる(数Kバ
イト)ように見えますが,hand
サブパッケージのモジュール性が実際に
なくなり,自身には含まれないことになってしまいます(サブディレクトリで
make dist
しても動作しません).
Automakeを使用しないパッケージは,この方法で統合するために,さらなる作 業が必要ですSee Third-Party Makefiles.