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.inAM_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.が出力されて上手くいきましたね。

まとめ

  1. Directoryとsource fileの作成
  2. autoscanconfigure.scan生成
  3. configure.scanconfigure.inにrename
  4. configure.inの修正
  5. autoheaderconfig.h.in生成
  6. aclocalaclocal.m4生成
  7. Makefile.amの作成
  8. automakeMakefile.in生成
  9. autoconfconfigureconfig.h生成