autoconf/automakeの使い方
以下のような構成でファイルが存在するとする。
sample +----- server | +--- server_main.cpp | +--- server.cpp | +--- server.h | +----- client +--- client_main.cpp +--- client.cpp +--- client.h
== 設定ファイルの準備 ==
Makefile.amを、プロジェクト直下のディレクトリとその下のソースファイルが置かれているディレクトリまで各階層毎に作成する。
=== sample/Makefile.amの作成 ===
$ vi sample/Makefile.am
このディレクトリではビルドするソースは存在しないので、存在するサブディレクトリを列挙する。
SUBDIRS = server client
=== sample/server/Makefile.amの作成 ===
$ vi sample/server/Makefile.am
インストール対象であるプログラムserverを作成する。
実行プログラムの場合 bin_PROGRAMS = server server_SOURCES = server_main.cpp server.cpp 普通のライブラリの場合 lib_LIBRARIES = libserver.a libserver_a_SOURCES = server_main.cpp server.cpp libtoolライブラリの場合 lib_LTLIBRARIES = libserver.la libserver_la_SOURCES = server_main.cpp server.cpp
=== sample/client/Makefile.amの作成 ===
$ vi sample/client/Makefile.am
インストール対象であるプログラムclientを作成する。
実行プログラムの場合 bin_PROGRAMS = client client_SOURCES = client_main.cpp client.cpp 普通のライブラリの場合 lib_LIBRARIES = libclient.a libclient_a_SOURCES = client_main.cpp client.cpp libtoolライブラリの場合 lib_LTLIBRARIES = libclient.la libclient_la_SOURCES = client_main.cpp client.cpp
=== autoscan ===
autoscanを実行して、configure.acのひな形configure.scanを作成する。
$ cd sample $ autoscan autom4te: configure.ac: no such file or directory autoscan: /usr/bin/autom4te failed with exit status: 1 $ mv configure.scan configure.ac # configure.acにリネーム $ vi configure.ac
# -*- Autoconf -*- # Process this file with autoconf to produce a configure script. AC_PREREQ(2.59) AC_INIT(sample, 1.0.0, [tappe@hoge.com]) ←編集 AM_INIT_AUTOMAKE ←追加 # AM_INIT_AUTOMAKE([foreign]) ←touchでファイルを作成したくないときはこちら AC_CONFIG_SRCDIR([server/server.h]) AC_CONFIG_HEADER([config.h]) # Checks for programs. AC_PROG_CXX AC_PROG_CC AC_PROG_LIBTOOL # libtoolライブラリをビルドor使用する場合は追加 # Checks for libraries. # Checks for header files. AC_HEADER_STDC AC_HEADER_SYS_WAIT AC_CHECK_HEADERS([arpa/inet.h netdb.h netinet/in.h stdlib.h string.h sys/param.h sys/socket.h unistd.h]) # Checks for typedefs, structures, and compiler characteristics. AC_HEADER_TIME # Checks for library functions. AC_FUNC_SELECT_ARGTYPES AC_CHECK_FUNCS([gethostbyname inet_ntoa memset select socket strpbrk]) AC_CONFIG_FILES([Makefile client/Makefile server/Makefile]) AC_OUTPUT
なお、AM_INIT_AUTOMAKEだけだと、automake時にtouch NEWS README AUTHORS ChangeLogが必要になる。それがいやならforeignを指定する。
== configure実施までの手順 ==
=== 必要ファイルを作成 ===
$ touch NEWS README AUTHORS ChangeLog
以下のlibtoolize、aclocal、autoheader、automake、autoconfの実行は、autoreconf -iでまとめて実行してくれそうなので、autoreconf -iを実行するだけでいいかも。
=== libtoolize ※ライブラリを作成する際のみ必要 ===
$ libtoolize -f -c
=== aclocal ===
aclocal.m4を生成する。
$ aclocal
=== autoheader ===
config.h.inを生成する。これはconfig.hの雛型ファイルで、./configure時に必要なファイル。
$ autoheader
=== automake ===
各ディレクトリにあるMakefile.amからMakefile.inを生成する。また、インストール作業時に必要なスクリプトファイルを生成する。
$ automake -a -c
=== autoconf ===
configureスクリプトを生成する。
$ autoconf
== ビルド ==
後は
$ ./configure --prefix=/home/tahara/sample $ make $ make install
とすれば、/home/tahara/sample/bin配下にserverとclientがインストールされる。
以後、configure.acを修正した場合は、autoreconf -iとすれば良い。
== 参考サイト ==
http://www.02.246.ne.jp/~torutk/cxx/automake/automake.html ←一番わかりやすいのはココ
http://www.ryuuo.com/sp/aa123/make/index.html
http://shimaki-hp.hp.infoseek.co.jp/autoconf/book1.html