t-nissieの日記: autotoolsについてのメモ
下記を更新したものをAutotoolsについてのメモに置いてます。
=================================
同種のものは巷に溢れていますが、どりあえず自分用のメモです。
=begin -*-RD-*-
= autotoolsについてのメモ
たいていのGNUのフリーソフトウエアは tar ball を展開して、
./configure && make && make install とすることで簡単に
インストールすることができる。autotoolsはそんなGNU流の
フリーソフトウエアパッケージの構築を半自動化するための
ツール。最終目的は make dist で foo-0.0.1.tar.gz などと
いう [パッケージ名]-[version].tar.gz 形式のパッケージが
自動生成できるようになること。
GNUの2つのパッケージautoconfとautomakeとを開発用のマシン
にインストールしておく必要がある。また、GNU make や bash
も最新のものを用意したほうがよい。
* (())
* (())
* (())
* (())
== 関連コマンド
autoreconf 以下のコマンド自動的に再実行してくれる。定番。-vオプションを付けて実行すれば何をしているのかがわかる。
autoconf configure.ac を元に configure を生成。
autoscan configure.inの雛形configure.scanを生成。
automake Makefile.amからMakefile.inを生成。
オプション -a を付けて実行すると必要なファイルを
/usr/local/share/automake-1.9/ からリンクしてくれる。
autoheader config.h.in を作ってくれたような気がする。
aclocal aclocal.m4を作ってくれたような気がする。
== 関連するファイルとディレクトリ
Makefile.am Makefileの雛型のMakefile.inの雛型。
AUTOMAKE_OPTIONS = foreign と書いておかないと
ライセンスをGPLにされちゃってご丁寧にもCOPYINGとかをコピーしてくれる。
config/gnu/ ファイルがごちゃごちゃ出来てイヤな場合は
AC_CONFIG_AUX_DIR(config/gnu) と指定するとmissing等がそこに置かれる。
config.guess AC_CANONICAL_TARGET などと書くと automake -a が用意してくれる
OSやCPUの自動判別をしてくれるスクリプト。
config.h.in config.hの雛型。autoheaderによりMakefile.amやconfigure.acから作られる。
config.h AM_CONFIG_HEADER(config.h) と指定。
ないとコンパイルオプションがややこしくなるので、使ったほうがよい。
config.log configure の実行時のログ。問題が起きたら読む。
config.status configure を実行すると出来るスクリプト。foo.in から foo を作るのは実はこいつ。
configure.ac configureの雛型。
missing automake -a が用意してくれる謎のスクリプト。
== 使用方法
autoconf, automake の inofo を参照せよ。
よくできたパッケージを参考にする。
ある程度開発が進んで、ソースとMakefileができあがってからautotoolsを使いはじめるとよい。
autoreconfで自動生成されるファイルはSubversionなどのリポジトリに登録しないほうがよい。
Fortranでも cpp (C プリプロセッサ) を使う。
ソースのファイルの名拡張子は .F を使う。
.F90 は GNU make のデフォルトでないので使わない。
AC_FC_FREEFORM() で自由形式のオプションがわかる。
== autotoolsの使用方法として参考になるパッケージ
=== LHa for Unix
シンプル。
((http://www2m.biglobe.ne.jp/~dolphin/lha/lha-unix.htm))
=== ntp
大規模だが的確に用いられている。
((http://ntp.isc.org/bin/view/Main/WebHome))
=== abinit
大規模。無理に稀れな例外まで考慮してややこしくしてしまっているような気もする。
version 5.1.4 以降。
((http://www.abinit.org/))
=end
autotoolsについてのメモ More ログイン