プロジェクト管理 (C, C++) automake, autoconf, libtool

これを使う利点

 * 沢山のライブラリを使う大規模なプログラムを作るときには、これを使わないと面倒で仕方がない.
 * 沢山のライブラリを使っているときは、特別な理由がなければダイナミックリンクライブラリを使う. でないとリンク時に依存関係を問われ面倒. これらのツールはダイナミックリンクライブラリを作るときに使う長いコマンドライン引数との格闘から解放してくれる.
 * システムの環境に対応してコンパイルのやり方を調整できる.
 * 再配布、インストールの時に、おなじみのtarball解凍 => configure; make; make check; make install　のやり方に統一される.

全体の流れ
参考 : http://www.fireproject.jp/feature/automake/basic/single_file.html


 * 1) ソースの準備
 * 2) autoscanを実行してconfigure.acのひな形作成 => configure.acの編集
 * 3) autoconfのための記述
 * 4) automakeのための記述
 * 5) Autoconfを実行してconfigureスクリプトを作成する.
 * 6) AutomakeのためにMakefile.amを作成する
 * 7) autoheaderでconfig.h.inを生成する.
 * 8) automake -a
 * 9) configure; make; make check; make installでプログラムのインストール.
 * 10) make distでtarball作成 => 再配布

基本的に上記サイトの通りにやれば大丈夫だが、configure.acの書き方がautomake, autoconfのバージョンが変わるにつれて変わっていってしまうので、そこを確認しておく必要がある. 例えば上記サイトの通りにするとautomake -aした時に以下のようなエラーが出た.

$ automake -a configure.in: no proper invocation of AM_INIT_AUTOMAKE was found. configure.in: You should verify that configure.in invokes AM_INIT_AUTOMAKE, configure.in: that aclocal.m4 is present in the top-level directory, configure.in: and that aclocal.m4 was recently regenerated (using aclocal). /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.in' 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.in' and run `aclocal' and `autoconf' again. oogasawa@rgm3:~/c_progs/zipf_cuda2 (2012-06-02 15:38:37)

何がいけないのかを知るには、もっとも正確な情報源、つまりは大元のGNU autoconfのホームページの情報を見に行くのが確実であろう. 正しい書き方を勉強するには、この中の、Making configure Scriptsを読むことになる. 長いので以下、要点だけ.
 * GNU autoconf : http://www.gnu.org/software/autoconf/

Files used in preparing a software package for distribution, when using just Autoconf:

your source files --> [autoscan*] --> [configure.scan] --> configure.ac    configure.ac --. |  .--> autoconf* -> configure [aclocal.m4] --+---+ |  `-> [autoheader*] --> [config.h.in] [acsite.m4] ---' Makefile.in Additionally, if you use Automake, the following additional productions come into play:

[acinclude.m4] --. |    [local macros] --+--> aclocal* --> aclocal.m4                      | configure.ac ' configure.ac --. +--> automake* --> Makefile.in    Makefile.am ---' Files used in configuring a software package:

.-> [config.cache] configure* +-> config.log |    [config.h.in] -. v           .-> [config.h] -. +--> config.status* -+              +--> make* Makefile.in ---'                   `-> Makefile ---'

要点は
 * 1) autoconfはconfigure.acの内容をもとにconfigureスクリプトを出力する.
 * 2) automakeはconfigura.acとMakefile.amの内容をもとにMakefile.inを出力する.
 * 3) configureスクリプトはMakefile.inをもとにMakefileを出力する.

つまり、configure.acとMakefile.amを書くことになる.

configure.acのひな形
まず、作法としてautoconfの入力ファイルの名前はconfigure.inではなくconfigure.acにすべき.

configure.acのひな形は以下の通り. (Autoconf Input Layout参照. To encourage consistency, here is a suggested order for calling the Autoconf macros. )

autoscanを実行するとひな形を作ってくれる. 例えば以下の通り.

このひな形には、automakeのための記述が書いていない. （使わないかもしれないわけですので） automakeのためのconfigure.acの書き方は http://www.gnu.org/software/automake/manual/automake.html#configure だから、実用になる最小限のひな形は以下のとおりである.


 * autoconfのための記述
 * automakeのための記述

良く使うマクロのリスト
各行のコマンド（マクロと呼ばれる）は、すでに用意されているものでほとんどの場合十分である. 良く使うマクロのリストは以下の通り. http://www.gnu.org/savannah-checkouts/gnu/autoconf/manual/autoconf-2.69/html_node/Existing-Tests.html#Existing-Tests