autotoolsの使い方(最終版)

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

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です