ファイヤープロジェクト
ディレクトリ構造の導入
2003-09-06T03:30+09:00   matsu
ソースファイルをパッケージのトップディレクトリのサブディレクトリに格納してAutomakeを適用してみる.
前頁では,
パッケージファイルのトップディレクトリ/hello.c
という状況でAutomakeを適用した.ビルド対象となるファイルが少ないパッケージを作成する場合は,これで十分である.しかし,プログラム,ドキュメント,ライブラリなどからなるパッケージを作成する場合にはディレクトリ毎にファイルを整理したい.そこでこの頁では
パッケージファイルのトップディレクトリ/src/hello.c
という状況でAutomakeを適用してみる.
では早速始めてみる.まず最初の状態.
$ ls -R
.:
src

./src:
hello.c
srcディレクトリの下に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が作成された.
matsu(C)
Since 2002
Mail to matsu