Autotoolsの簡単な使いかた (2)
前回に引き続き、Autotoolsの簡単な使いかたの解説です。
autoheader
前回はconfigure.inの修正まででしたが、次はautoheaderを実行します。autoheaderは主にconfig.h.inというfileを生成するために実行します。config.h.inは処理系依存のmacroを集めたheader fileであるconfig.hの元になるfileです。
$ autoheader $ ls autom4te.cache autoscan.log config.h.in configure.in hoge.cpp
これでconfig.h.inが生成されたはずです。autom4te.cacheというdirectoryは今回は直接関係ありませんので、説明は省略します。
aclocal
前回configure.inにAM_INIT_AUTOMAKEというmacroを追加したと思いますが、実はこれはただでは使用できず、aclocalを1度実行しておかなければなりません。
$ aclocal $ ls aclocal.m4 autom4te.cache autoscan.log config.h.in configure.in hoge.cpp
aclocalを実行するとaclocal.m4というfileが生成されていると思いますが、これが生成されているならOKです。
Makefile.amの作成
次にMakefile.amを作成します。このfileはMakefileの元になるMakefile.inの元になるfileです。何だかややこしいですが。こればっかりはfull scratchで自分で書かなければなりません。
$ emacs Makefile.am
今回はMakefile.amには以下のように記述します。
bin_PROGRAMS = hoge hoge_SOURCES = hoge.cpp
要するに、最終的に出力するprogram名がhoge、そのprogramのsource fileにhoge.cppがあるということをautomakeに知らせてやるということです。
automake
ようやくautomakeです。これは先ほども書きましたが、Makefileの元になるMakefile.inを生成するために実行します。
automakeはいろいろと細かく文句を言ってくるので、文句を言われる前に準備をしておきます。
$ touch NEWS README AUTHORS ChangeLog
つまり、以上のfileを空でもいいから作成しておくということです。もちろん本来の目的のためにこれらのfileの中身をしっかり書いてもいいのですが、今回は別にいいでしょう。
さて、いよいよatuomakeを実行します。-a optionを忘れないでください。このoptionを指定していれば、存在しない必要なfileを自動的に用意してくれます。
$ automake -a $ ls AUTHORS INSTALL NEWS autom4te.cache configure.in install-sh COPYING Makefile.am README autoscan.log depcomp missing ChangeLog Makefile.in aclocal.m4 config.h.in hoge.cpp
色々とfileが増えていると思いますが、今回は気にしなくてもかまいません。COPYINGはlicence表示ですが、fileを用意していないと自動的にGPLを記述したものがsymbolic linkされるはずです。GPL以外のlicenceにしたいときは自分で作成しましょう。
これでMakefile.inが生成されていれば成功です。
autoconf
最終段階です。これを実行すればconfigureが生成されます。
$ autoconf $ ls AUTHORS INSTALL NEWS autom4te.cache configure hoge.cpp COPYING Makefile.am README autoscan.log configure.in install-sh ChangeLog Makefile.in aclocal.m4 config.h.in depcomp missing
configureが生成されていれば大丈夫です。
では、試しにMakefileを生成し、makeしてみましょう。
$ ./configure : $ make : $ ls AUTHORS Makefile.am autom4te.cache config.log hoge stamp-h1 COPYING Makefile.in autoscan.log config.status hoge.cpp ChangeLog NEWS config.h configure hoge.o INSTALL README config.h.in configure.in install-sh Makefile aclocal.m4 config.h.in~ depcomp missing
commandのhogeが生成されていればcompileは成功です。
$ ./hoge Hello, World. $
Hello, World.が出力されて上手くいきましたね。