にたまごほうれん草アーカイブ

はてなダイアリーで書いてた「にたまごほうれん草」という日記のアーカイブです。現在は「にたまごほうれん草ブログ」を運営中です。

autoreconfを使って簡単にビルド環境を作る

前回も軽く触れたけれども、automake/autoconfでビルド環境を作るのは少し面倒な印象があった。
ところが、autoreconfを使うと途中の面倒な作業を大幅に軽減できることがわかったので、メモがてら一連の流れについて書くことにする。

手順

  1. ソースコードを用意する
  2. Makefile.amを用意する
  3. configure.acを用意する
  4. autoreconfを実行
  5. あとは./configure && make && make install

1. ソースコードを用意する

今回は、以下のような簡単なソースコード(hello.c)からhelloという実行バイナリを作成するプロジェクトを作成する。

#include <stdio.h>
int main(int argc, char* argv[])
{
    printf("Hello, world!\n");
    return 0;
}

2. Makefile.amを用意する

これは手書き。といっても実行ファイルを一つ作るだけの簡単なプロジェクトでは、以下の通り2行で済む。

bin_PROGRAMS = hello
hello_SOURCES = hello.c

3. configure.acを用意する

引数なしでautoscanを実行すると、configure.scanが生成されるので、それを編集・リネームしてconfigure.acを得ます。
まず、autoscanを実行してできたconfigure.scanを開くと、以下のようになっています。「(略)」の部分はコメントです。

(略)
AC_PREREQ(2.61)
AC_INIT([hello], [0.0.1], [hoge@fuga.com])
AC_CONFIG_SRCDIR([hello.c])
AC_CONFIG_HEADER([config.h])

# Checks for programs.
AC_PROG_CC

(略)
AC_CONFIG_FILES([Makefile])
AC_OUTPUT

これを2点修正します。

  • AC_INITの行を編集
  • AM_INIT_AUTOMAKEの行を追加*1

こんな感じにします。

(略)
AC_INIT([hello], [0.0.1], [hoge@fuga.com])
AM_INIT_AUTOMAKE([-Wall -Werror foreign])
(略)

追加したら、configure.acとして保存します。

4. autoreconfの実行

$ autoreconf -vfi

これでconfigureスクリプトMakefile.inが作成されます。

5. あとはいつもどおり

$ ./configure && make
$ sudo make install

としてビルド&インストール環境ができました。
ソースコードの増減でMakefile.amを変更したり、チェック項目を増やしてconfigure.acを修正したら、再度autoreconfを実行するだけ。
意外とらくちんなのでした。

さいごに

configure.acに記述するマクロについてはまだまだ不勉強な箇所が多いため、全ての場合においてこんなに簡単にはできませんが、今までせこせこMakefileを作っていたのに比べるとかなり楽できるようになったのではと思います。

*1:これがないとMakefile.inができません