Automakeは,Makefile,configure,そして Makefile.inのようなその他の派生するファイルを,自動的にリビルド するルールを生成します.
configure.acでAM_MAINTAINER_MODE
を使用している場合,これ
らの自動的なリビルドのルールは,管理者モードでのみ利用可能になります.
.m4ファイルを探す場所を伝えるために,-I
のような引数を用
いてaclocal
実行する必要があることもあります.make
が自動
的にaclocal
を実行するときもあるので,これらの引数を指定する方法
が必要になります.ACLOCAL_AMFLAGS
を定義することで,こうすること
が可能になります.これは,aclocal
に渡す引数をそのまま保持してい
ます.この変数は,最上位のMakefile.amでのみ役に立ちます.
追加の依存性を用いてconfigureやconfig.statusをリビルドす
るルールを補足すると便利なときもあります.変数
CONFIGURE_DEPENDENCIES
とCONFIG_STATUS_DEPENDENCIES
をこれ
らの追加の依存性をリストアップするために使用することが可能です.これら
の変数はツリー内のすべてのMakefileで定義されるべきなので(これら
二つのリビルドルールはすべてのものに出力されるため),
configure.acでAC_SUBST
するのが安全で簡単です.例えば以下
の文で,version.shが変更されるたびconfigureが再実行され
ます.
AC_SUBST([CONFIG_STATUS_DEPENDENCIES], ['$(top_srcdir)/version.sh'])
ファイル名に$(top_srcdir)/
があることに注意して下さい.この変数
はすべてのMakefileで使用されるので,その値はビルドの階層レベル
を知っておく必要があります.
CONFIG_STATUS_DEPENDENCIES
に対するCONFIGURE_DEPENDENCIES
を誤解しないように注意して下さい.
CONFIGURE_DEPENDENCIES
はconfigureルールに依存性を追加し,
それはautoconf
を実行することになります.automake
は既に
m4_include
されるファイルを追跡しているので,この変数は,滅多に
使用すべきではありません.しかし,m4_esyscmd
やそれに似た副作用
のある推奨されていないマクロを用いたトリッキーなゲームを楽しんでいると
き役に立つはずです.
CONFIG_STATUS_DEPENDENCIES
はconfig.statusルールに依存性
を追加し,それはconfigureを実行することになります.このため,こ
の変数として,configureの実行に副作用として読み込まれる可能性がないよ
うに,標準的ではないソースを持ち込むべきで,例えば上記の例の
version.shなどです.
version.shスクリプトについて言わせてもらうと,我々は今日,それ を推奨していません.それらは主に,パッケージのバージョンをスクリプトで 自動的に更新するとき使用されていました(例えば,毎日のビルド).古い形式 のconfigure.acは以下のようになっているものもありました.
AC_INIT . $srcdir/version.sh AM_INIT_AUTOMAKE([name], $VERSION_NUMBER) ...
ここで,version.shはシェルの断片で,VERSION_NUMBER
を設定
します.この例の問題は,automake
が依存性を追跡できないことと
(version.shをCONFIG_STATUS_DEPENDENCIES
にリストアップし,
このファイルをユーザに配布する),古い形式のAC_INIT
と
AM_INIT_AUTOMAKE
を使用していることです.新しい構文に更新するの
は,AC_INIT
の引数でシェル変数が利用できないので,素直な方法では
ありません.我々はversion.shをconfigure.acでインクルード
されるM4ファイルで置換することを推奨します.
m4_include([version.m4]) AC_INIT([name], VERSION_NUMBER) AM_INIT_AUTOMAKE ...
ここで,version.m4にはm4_define([VERSION_NUMBER], [1.2])
のようなものを含めることができます.この二番目の形式の利点は,
automake
がリビルドルールを定義するとき依存性に注意し,ファイル
も自動的に配布されることです.不便な点は,バージョンナンバーが上昇する
たびにautoconf
が再実行されることで,以前の設定では,
configureだけが再実行されていました.