autotools でコンパイルする (2. automake)
automake の役割
automake で Makefile を作成してコンパイルできるようにする。
./configure
とすると Makefile.in から Makefile ができる。 この Makefile.in を Makefile.am から作成するのが automake。
autotools でコンパイルする (1. Hello world プログラム) で作成した hello.c に対して Makefile を作成してみる。以下は http://markuskimius.wikidot.com/programming:tut:autotools:4 のチュートリアルを実行した。
automake のサンプル
Makefile.am
bin_PROGRAMS=hello
hello_SOURCES=hello.c
bin_PROGRAMS に作成するファイル名 hello を指定して、そのソースを hello_SOURCES に指定する。
automake の実行
automake
とすると Makefile.in ができるはずなのだが、この段階ではエラーでうまくいかない。
automake のエラー
私の環境では次のようなエラーが出た。
configure.ac: no proper invocation of AM_INIT_AUTOMAKE was found.
configure.ac: You should verify that configure.ac invokes AM_INIT_AUTOMAKE,
configure.ac: that aclocal.m4 is present in the top-level directory,
configure.ac: and that aclocal.m4 was recently regenerated (using aclocal).
Makefile.am: required file `./INSTALL' not found
Makefile.am: `automake --add-missing' can install `INSTALL'
Makefile.am: required file `./NEWS' not found
Makefile.am: required file `./README' not found
Makefile.am: required file `./AUTHORS' not found
Makefile.am: required file `./ChangeLog' not found
Makefile.am: required file `./COPYING' not found
Makefile.am: `automake --add-missing' can install `COPYING'
Makefile.am: required file `./depcomp' not found
Makefile.am: `automake --add-missing' can install `depcomp'
/usr/share/automake-1.11/am/depend2.am: am__fastdepCC does not appear in AM_CONDITIONAL
/usr/share/automake-1.11/am/depend2.am: The usual way to define `am__fastdepCC' is to add `AC_PROG_CC'
/usr/share/automake-1.11/am/depend2.am: to `configure.ac' and run `aclocal' and `autoconf' again.
/usr/share/automake-1.11/am/depend2.am: AMDEP does not appear in AM_CONDITIONAL
/usr/share/automake-1.11/am/depend2.am: The usual way to define `AMDEP' is to add one of the compiler tests
/usr/share/automake-1.11/am/depend2.am: AC_PROG_CC, AC_PROG_CXX, AC_PROG_CXX, AC_PROG_OBJC,
/usr/share/automake-1.11/am/depend2.am: AM_PROG_AS, AM_PROG_GCJ, AM_PROG_UPC
/usr/share/automake-1.11/am/depend2.am: to `configure.ac' and run `aclocal' and `autoconf' again.
AM_INIT_AUTOMAKE
configure.ac に AC_INIT の直後に AM_INIT_AUTOMAKE を追加して、次の configure.ac の一部のように変更する。
AC_PREREQ([2.68])
AC_INIT([FULL-PACKAGE-NAME], [VERSION], [BUG-REPORT-ADDRESS])
AM_INIT_AUTOMAKE
AC_CONFIG_SRCDIR([config.h.in])
AC_CONFIG_HEADERS([config.h])
ここで、autoconf を実行する前に aclocal が必要となる。
aclocal
autoconf
として configure を作成しなおす。
autoconf は AC_ で始まるマクロを解釈する。 AM_ で始まる automake のマクロを解釈するためには
aclocal
を実行して aclocal.m4 を作る必要がある。
見つからないファイルをコピーする
INSTALL、COPYING、depcomp が見つからないというエラーがでている。 これらのファイルは Ubuntu 12.04 だと /usr/share/automake-1.11/ 以下にサンプルがあるのでコピーして使う。
automake -a -c
でコピーしてくれる。 GPLv3 以外のライセンスを使う場合は、適当なファイルをダウンロードして COPYING にする。
NEWS、README、AUTHORS、ChangeLog については作成すれば良いのだが、 ここではとりあえず automake が通ればよいので
touch NEWS README AUTHORS ChangeLog
で空のファイルを作っておく。
automake
でエラーが出なければ OK。
これで
./configure
make
でコンパイルできる。
配布するとき
autotools を利用したソースコードを配布するときには configure.scan、autoscan.log、configure.ac などの中間生成ファイルは不要。