Linuxで、ソースコードを持ってきたときに、./configure; make とやってバイナリを作成するのだが、自分でプログラムを書いたときに、configureをどのように作成するのかを調べたのでメモ
autoconf関連はバージョンごとに記述方法が異なるので、バージョンが違う場合には2.configure.in移行をやり直したほうが簡単っぽい。
ソースコードはフォルダに分かれているとする。
1. Makefile.amを各フォルダごとに作成する
イコールの右辺で列挙する際は、すべてスペース区切り。
SUBDIRS = サブフォルダがある場合に、列挙
bin_PROGRAMS = 作成されるバイナリの名前を、列挙
バイナリ名_SOURCES = そのバイナリを作成するのに必要なソースコード、.cppや.hを列挙
バイナリ名_LDADD = そのバイナリをリンクするのに必要なライブラリを、列挙
lib_LIBRARIES = 作成されるライブラリの名前、.aを列挙。
noinst_LIBRARIES = インストールの必要のない場合の書き方。
ライブラリ名_a_SOURCES = ライブラリを作成するのに必要なソースコード、.cppや.hを列挙
デバッグ版とリリース版を分ける場合は、
bin_PROGRAMS = prog prog-d
srcs = prog.c prog.h
prog_SOURCES = $(srcs)
prog_CXXFLAGS = -DNDEBUG
prog-d_SOURCES = $(srcs)
prog-d_CXXFLAGS = -DDEBUG
のようにすればOK
2. configure.inを作成
autoscanを実行すると、サブフォルダを巡回して、Makefile.amを検知した後、configure.scanが作成される。
configure.scanをconfigure.inに名称変更
3. configure.inの編集
AC_INIT(パッケージ名, バージョン番号, サポートemailアドレス)
AM_INIT_AUTOMAKE([パッケージ名])
AC_CONFIG_SRCDIR([mainのあるcppファイル名を相対フォルダで指定])
AC_PROG_RANLIB #なんだかよくわからんけどないとエラーが出た
4. aclocal.m4の作成
aclocalを実行
5. config.h.inを作成
autoheaderを実行
6. Makefile.inを作成
automake –add-missing
–add-missingを指定すると、足りないファイルをどこかからコピーしてくれたり、警告してくれたりする。
7. configureを生成
autoconfを実行
8. ./configureの確認
./configureを実行して、Makefileの作成
makeでちゃんとビルドができるか確認。
9. makeのターゲット
all 全ビルド
clean ビルド時の中間生成物の削除
distclean Makefileも含めての中間生成物の削除。(./configureをやり直す必要がある)
dist ソースコードをtar.gzにまとめてくれる。
参考文献
Kiyoshiy – 即席GNU (autoconf & automake)
Object-Oriented & Java maneuver 別室 – Automakeでmakeする