autoconf

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する

コメントを残す

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください