前: 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.