make作業の統合

ここまでで、ライブラリのビルドとアプリケーションのビルドが完了して完了ですが、現状の構成では、libcsv/makeと./makeの2回のビルド作業が必要になり少々面倒です。一度のmakeでライブラリおよび本体のアプリケーションをビルドしたいと思うのがほとんどの開発者でしょう。そこで、さらに手を加えて一度のmakeでアプリケーションをビルドできるよう修正していきます。

ライブラリ側のファイル(configure.ac/makefile.am)は特に変更する必要はありません。ライブラリ単体で開発する場合はlibcsv内でmakeしながら開発します。アプリケーション本体側の設定にlibcsvを認識するよう指定をおこないます。

SUBDIR変数の指定

automakeでサブディレクトリを再帰的にビルドするためにはautomakeにサブディレクトリの存在を、SUBDIR変数に設定して教えてあげる必要があるためmakefile.amに次の1行を追加します。

SUBDIRS=libcsv .

サブディレクトリが複数ある場合はmakeしたい順にSUBDIR変数にセットします。ここでは当然ライブラリを先にビルドした後本体のビルドをおこなうよう指定しています。

AC_CONFIG_FILESの追加

サブディレクトリのビルドをおこなうためには、当然サブディレクトリにmakefileが生成されていなければなりませんのでメインのconfigure.acにサブディレクトリのmakefileも作成するよう指示を追加します。

AC_CONFIG_FILES([libcsv/makefile makefile])

上位のconfigureスクリプトはAC_CONFIG_FILESマクロでサブディレクトリの作成を支持されるとmakefile.inからmakefileを作成します。従ってlibcsv/makefile.inはautomakeなどであらかじめ作成しておく必要があります。もちろん今回の例ではすでに作成済みですのであらためて作成する必要はありません。ただし、libcsv/configureは実行されませんので、ここでカスタマイズしていたマクロは上位のconfigure.acへ追加しる必要があります。今回は、libcsv/configure.acにAC_PROG_RANLIBを定義していましたのでこのマクロを上位のconfigure.acにも追加します。

AC_PROG_RANLIB

準備ができましたので関連するファイルを再作成します。

makefileの再作成

configure.acを修正していますので最初から再作成を実行します。libcsvのほうは修正していませんのでそのままです。

# autoconf
# aclocal
# automake -a -c
# ./configure --with-mysql=/usr/local/mysql/bin/mysql_config

確認のため一度、クリーンアップします。--distcleanオプションはautomakeで生成されるmakefileに付属するおまけターゲットで、configureスクリプトで作成されたファイルも削除します。もちろん、cleanターゲットも生成されています。このようによく使うターゲットまで自動で作成してくれるところがautomakeを使うメリットのひとつともいえます。これまでの修正が正しければメインディレクトリおよびサブディレクトリがクリーンアップされるはずです。

# make distclean
:(略)
Making distclean in libcsv
make[1]: Entering directory `/home/foo/sample/libcsv'
test -z "libcsv.a" || rm -f libcsv.a
rm -f *.o
:(略)
Making distclean in .
make[1]: Entering directory `/home/foo/sample'
test -z "sample" || rm -f sample
rm -f *.o
:(略)

メインディレクトリでmake

ライブラリが削除されていることを確認して再度makeします。これで、ライブラリとアプリケーションがビルドされるはずです。

# ./configure --with-mysql=/usr/local/mysql/bin/mysql_config
:(略)
# make
:(略)

エラーなくアプリケーションがビルドされていることを確認します。