autotoolsを使ってみた

初めてautotools使ってみました。
MonaではMakefileは、もちろんのことconfigureスクリプトも手で書いています。
特にMakefile
id:higepon:20050626:1119789542
でも書いたように、いろいろな人のサポートもあってある程度ノウハウがたまっています。


とはいっても、何かをソースからインストールする場合は間違いなくautotoolsの恩恵にあずかっているわけで、事実上のデファクトスタンダードなので学んでおいても良いかなと。


まだ簡単にしか使っていませんが感想としては

メリット

    • デファクトスタンダードなのでインストールする人が迷わない
    • makeのターゲット(install, uninstall, distclean, dist)などが何もしなくてもサポートされている


デメリット

    • autotoolsといってもぜんぜん自動じゃないし手順がかなり複雑
    • ツールが吐くファイルがとても多くとても無駄のように思える
    • 簡単なツールのビルドなのに./configure, makeなどに割りと時間がかかる
    • makeやconfigureの役割と仕組みを理解せず、autotoolsを使い始めるのはよくなさげ

メモ

autoconf configure.inから configureを生成する
autoscan configure.inの雛形configure.scanを生成する
config.h 必須ではないがconfigureの生成するマクロをまとめたもの
autoheader config.hの雛形であるconfig.h.inを生成する
automake Makefile.amからMakefile.inを生成する
aclocal automake用マクロがうんぬん

Makefile.amを書く。configure.inをいじるが基本

 #ifdef HAVE_CONFIG_H
 #  include "config.h"
 #endif

ソースファイルが同じディレクトリにある場合

1.Makefile.am

 bin_PROGRAMS = msg2header
 msg2header_SOURCES = MessageUtil.cpp MessageUtil.h main.cpp

2.touch configure.ac
3.autoscan
4.mv configure.scan configure.ac
5.configure.ac追記

 AC_INITに名称・バージョン
 AM_INIT_AUTOMAKE([foreign])

6.autoheader
7.touch NEWS README AUTHORS ChangeLog
8./usr/local/bin/aclocal
9./usr/local/bin/automake -a -c
10.autoconf

ソースファイルをsrcディレクトリに入れる場合

1.Makefile.am(一番上)

 SUBDIRS = src

2.src/Makefile.am

 bin_PROGRAMS = msg2header
 msg2header_SOURCES = MessageUtil.cpp MessageUtil.h main.cpp

あとは手順は同じ

その後にconfigure.inを書き換えた場合、 autoreconf -i とする