ディレクトリ構造の導入
ソースファイルをパッケージのトップディレクトリのサブディレクトリに格納してAutomakeを適用してみる.
前頁では,
パッケージファイルのトップディレクトリ/hello.cという状況でAutomakeを適用した.ビルド対象となるファイルが少ないパッケージを作成する場合は,これで十分である.しかし,プログラム,ドキュメント,ライブラリなどからなるパッケージを作成する場合にはディレクトリ毎にファイルを整理したい.そこでこの頁では
パッケージファイルのトップディレクトリ/src/hello.cという状況でAutomakeを適用してみる.
では早速始めてみる.まず最初の状態.
$ ls -R .: src ./src: hello.csrcディレクトリの下にhello.cがある.これは前頁と同じものである.この状態からパッケージを作成する.全体の流れは前頁と同じである.最初にconfigure.inを作成する(※).
$ autoscan $ mv configure.scan configure.inそしてconfigure.inを編集.最終的に以下のようになる.
# Process this file with autoconf to produce a configure script. AC_INIT(src/hello.c) AM_INIT_AUTOMAKE(hello,1.00,hoge@fuga) AM_CONFIG_HEADER(config.h) # Checks for programs. AC_PROG_CC # Checks for libraries. # Checks for header files. AC_HEADER_STDC AC_CHECK_HEADERS([stdlib.h]) # Checks for typedefs, structures, and compiler characteristics. # Checks for library functions. AC_OUTPUT([Makefile src/Makefile])ソースがsrcの下にあり,出力ファイルの指定AC_OUTPUTの引数にsrc/Makefileが増えている.あと,Automake用のマクロをAutoconfが理解できるようにaclocalしておく.
$ aclocal $ ls -R .: aclocal.m4 autoscan.log configure.in src ./src: hello.c
※どんなディレクトリ構成のパッケージでもconfigure.inはパッケージのトップディレクトリにのみ唯一存在する.
次にパッケージのトップディレクトリでAutoconfを実行してconfigureスクリプトを作成する.
$ autoconf $ ls -R .: aclocal.m4 autoscan.log configure configure.in src ./src: hello.cここでの作業自体は前頁と同じである.
次にMakefile.amを作成する.まずパッケージのトップディレクトリで以下のようなMakefile.amを作成する.
$ cat Makefile.am SUBDIRS = srcここではサブディレクトリを指定しているだけである.ここで指定した全てのサブディレクトリにMakefile.amが必要である.次にそのサブディレクトリsrcのMakefile.am.
$cat src/Makefile.am bin_PROGRAMS = hello hello_SOURCES = hello.c前頁と同じ内容である.
autoheaderを実行しいくつか必要なファイルを作成すればAutomakeを実行できる.
$ autoheader $ touch NEWS README AUTHORS ChangeLog $ automake -a automake: configure.in: installing `./install-sh' automake: configure.in: installing `./mkinstalldirs' automake: configure.in: installing `./missing' automake: Makefile.am: installing `./INSTALL' automake: Makefile.am: installing `./COPYING'試してみる.
$ ./configure creating cache ./config.cache ...省略... creating config.h $ make make all-recursive ...省略... gcc -DHAVE_CONFIG_H -I. -I. -I.. -Wall -pedantic -ansi -c hello.c gcc -Wall -pedantic -ansi -o hello hello.o ...省略... $ ./src/hello hello無事src/helloが作成された.

