2012年03月24日

GNU autoconf と automake を使って自作アプリの配布パッケージ作成。

GNU系アプリのソースをダウンロードしてインストールする際、必ずやるのが tar zxvf(圧縮ファイルを展開) → ./configure(Makefile自動生成) → make(コンパイル) → make install(インストール) だ。

./configure のお陰で自分の環境に合わせたMakefileが自動生成される。これはユーザにとっては非常にありがたいものである。

この配布用パッケージの作成を便利にしてくれるのが、GNUの autoconfautomake というツールである。

今回はMinGW/MSYS環境にてこれらのツールを使い、自作アプリの配布パッケージを作ってみたいと思う。以下に出てくる foo はパッケージ名、hoge はソース・実行ファイル名を表している。

まずは作業用ディレクトリとしてfooフォルダを作成。これが今回の作業におけるルートディレクトリになる。そして、foo直下にはソース格納用のsrcフォルダを作成する。

$ mkdir foo
$ cd foo
$ mkdir src


早速ソースコード(hoge.c)を foo/src に保存する。これはカレントディレクトリを表示するだけの簡単なアプリだ。

foo/src/hoge.c
#include <stdio.h>
#include <unistd.h>

int main(){
char cd[1024];
getcwd(cd, sizeof(cd));
printf("カレントディレクトリ: %s\n", cd);
return 0;
}


次にfoo/に configure.ac と Makefile.am を新規作成し、
$ cd ..
$ touch configure.ac Makefile.am


以下の内容で保存する。

foo/configure.ac
# Initialize for autoconf and automake
AC_PREREQ([2.58])
AC_INIT([foo], [0.0.0])
AC_CONFIG_AUX_DIR([build-aux])
AM_INIT_AUTOMAKE([1.9 foreign -Wall])
AC_CONFIG_SRCDIR([src/hoge.c])
AC_CONFIG_HEADERS([build-aux/config.h])
AM_MAINTAINER_MODE

# Checks for programs
AC_PROG_CC

# Output results
AC_CONFIG_FILES([
Makefile
build-aux/Makefile
src/Makefile
])
AC_OUTPUT


上記では、fooがパッケージ名、0.0.0 がバージョン、src/hoge.c がソース・ディレクトリ内にあるソースファイルの一つを指定している(srcフォルダの場所さえ分かればいいようだ)。

foo/Makefile.am
SUBDIRS = build-aux src
ACLOCAL_AMFLAGS = -I build-aux


次に foo/build-aux フォルダを新規作成。そこへautomakeに必要なファイルをautomakeのインストール先(/mingw/share/automake-#.##/)からコピー。空のMakefile.amも新規作成。
$ mkdir build-aux
$ cd build-aux
$ cp /mingw/share/automake-1.11/{compile,config.guess,config.sub,depcomp,install-sh,missing} .
$ touch Makefile.am


次に再び foo/src フォルダに移動し、Makefile.amを新規作成し、

$ cd ../src
$ touch Makefile.am


以下の通り編集保存する。

foo/src/Makefile.am
bin_PROGRAMS = hoge
hoge_SOURCES = hoge.c

上記は /mingw/bin フォルダへインストールさせる場合の例だ。
ソースファイルが他にも複数ある場合は、hoge.cの後ろにスペース区切りで追加していく。

foo/ に戻り、autoconf, automake にあれこれ準備させる。

$ cd ..
$ aclocal
$ autoheader
$ autoconf
$ automake


foo/buildフォルダを作成し、foo/buildフォルダ内に移動。そこで ../configure → make でテンプレの出来上がり。

$ mkdir build
$ cd build
$ ../configure --enable-maintainer-mode
$ make


この時点でfoo/のディレクトリ構造は以下のようになっているはずだ。赤字は今回手作業で作成したもの。青字はコピーしてきたもの。そして、それ以外はautomakeなどが自動生成したものとなっている。
foo/
src/
│ └hoge.c
│ └Makefile.am
│ └Makefile.in
build-aux/
│ └depcomp
│ └install-sh
│ └missing
│ └config.guess
│ └config.sub
│ └Makefile.am
│ └config.h.in
│ └Makefile.in
build/
│ └Makefile
│ └config.log
│ └config.status
│ └src/
│ │ └Makefile
│ │ └hoge.o
│ │ └hoge.exe
│ │ └.deps/
│ │ └(省略)
│ └build-aux/
│ └Makefile
│ └stamp-h1
│ └config.h
configure.ac
Makefile.am
└aclocal.m4
└configure
└Makefile.in
└autom4te.cache/
└(省略)


最後に配布パッケージを一つにまとめて本当の完成である。foo/buildで、make dist すればOK。

$ make dist


foo-0.0.0.tar.gzという配布用パッケージファイルが生成されているはずだ。

このファイルを展開し、configure→make→make install すると、/mingw/bin/ に hoge.exe がインストールされる。


■今回参考にさせていただいたサイト
Autoconf + Automakeの使い方のメモ


GNU Make 第3版
GNU Make 第3版
posted with amazlet at 12.03.24
Robert Mecklenburg
オライリージャパン
売り上げランキング: 92560

PR:お買い物はAmazonで
posted by 寄り道退屈男 at 10:01 | Comment(0) | TrackBack(0) | 開発環境