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 などの中間生成ファイルは不要。

参考

Tags of current page

,