Using Autotools - Gnome Developerより
C/C++でのちょっと大きい構成でのMakefileのコンパイル記述法めんどくさいですよね。
それを、簡単にかつ環境に合わせて生成してくれるAutoMake/Autotoolsというのツール群あるのですが、それもさらに複雑でめんどくさいです。
Automake以外にもCMakeやwafと言ったもう少し簡単なツールもあるのですが、どれもそこまで簡単ではないし、世の中の既にAutoMakeで作られているプロジェクトを改変する場合は避けて通れないので、これについてメモ程度に解説を残しておこうかなと思います。自分も毎度調べていて疲れてきたので。
ここでは、以下の2つの実際にあるであろうシチュエーションにわけて説明します。
- 自分でも結構手の込んだC/C++のプロジェクトを作ろうと思った時
- 他人の作ったプロジェクトで
./configure
がコケてしまう時
1. 自分で作る時
まず、重要な入力と出力を確認しておきましょう。ソースコード以外に、必要なのはMakefile.amというMakefileよりも簡単な定義文だけです。
そこから./configure
が出来るようにするために、configure
ファイル自身の生成、それがMakefileを作成する時に用いるMakefile.in
とconfig.h.in
を作成するのが目的です。これら以外のものは全て中間生成物です。
まとめると以下のようになります。
入力:
- ソースコード(
hello.h
,hello.cc
,main.cc
) Makefile.am
bin_PROGRAMS = hello
hello_SOURCES = hello.cc hello.h main.cc
出力
configure
-
./configure
が参照するMakefile.in
とconfig.h.in
作成のフロー
作成のフローを解説しているサイトはたくさんあるので、自分は1工程ごとにcommitしたgitリポジトリを作ってみました。これのcommit履歴とREADMEを参照してください。
使うコマンドの順番としては以下の順で、間にところどころ書き換えや名前の置換えが入ります。
- autoscan
- autoheader
- aclocal
- automake
- autoconf
- ./configure
- make
細かい解説はREADMEにREFERENCEと書かれているドキュメントを読むのがいい気がします。僕は実際にこれらの解説を読んでこのコミット群を作りました。
上のGnome Developerの図では、configure.acは自分で用意することになってますが、autoscanを使うと自動生成できます。
autoheaderでconfig.h.in
を作成する部分も書かれてませんね。
2. 他人のconfigureを修正する時
上記の事がわかっていると、./configure
がうまく行かなかった場合、以下の3つの事ができるようになります。
- configureを修正する。
- configure.ac(昔はconfigure.in)を必要なら修正して、autoheader(大抵automakeからでOK)からやり直す。
- Makefile.amを必要なら修正して、autoscanからやり直す。
3.の方に行けば行くほど直すべきファイルの行数が少ないので直しやすくなるはずです。