./configure のお陰で自分の環境に合わせたMakefileが自動生成される。これはユーザにとっては非常にありがたいものである。
この配布用パッケージの作成を便利にしてくれるのが、GNUの autoconf や automake というツールである。
今回は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版
posted with amazlet at 12.03.24
Robert Mecklenburg
オライリージャパン
売り上げランキング: 92560
オライリージャパン
売り上げランキング: 92560
PR:お買い物はAmazonで