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