パッケージに二,三個以上のCプリプロセッサのシンボルのテストが含まれてい
るとき,コマンドラインでコンパイラに渡す‘-D’オプションはかなり長く
なります.これは二つの問題があります.一つは,makeの出力のエラー
を探すとき,見て分からなくなることです.更に深刻な問題は,コマンドライン
がいくつかのオペレーティングシステムの長さの制限を越えることです.コンパ
イラに‘-D’オプションを渡す代わりに, configureスクリプト
で‘#define’ディレクティブを含んでいるCヘッダファイルを作成すること
が可能です.AC_CONFIG_HEADER
マクロで,この出力を選択します.それ
は,AC_INIT
の直後に呼び出します.
(例えば,const
を再定義する場合)宣言の不一致を防ぐために,パッケー
ジでは,あらゆる他のヘッダの前で,コンフィグレーションヘッダファイルを
‘#include’すべきです.‘#include "config.h"’の代わりに
‘#include <config.h>’を使用し,Cコンパイラに‘-I.’オプション(ま
たは‘-I..’.config.hがある方)を渡してください.そうすること
で,(おそらく配布物を作成するときに)ソースディレクトリがコンフィグレーショ
ンされても,他のビルドディレクトリは,ソースディレクトリから
config.hを探すことなく,コンフィグレーション可能になります.
このマクロは,実際にファイルを作成するマクロの一つです. Configuration Actionsを参照してください.
AC_OUTPUT
は,#define
宣言のCプリプロセッサを含んでいるheaderの空白で区切 られたリストを作成し,生成されたファイルの‘@DEFS@’を,DEFS
の値の代わりに,-DHAVE_CONFIG_Hで置換します.通常,header の名前はconfig.hです.headerがすでに存在していて,その内容が
AC_OUTPUT
が書き込むも のと同じ場合は,そのまま残ります.こうすることで,ヘッダファイルに依存す るオブジェクトファイルを不必要に再コンパイルする必要がなく,コンフィグレー ション時に変更を行なうことが可能になります.通常,入力ファイルはheader.inと命名されます.しかし,入力ファ イルをコロンで分けた入力ファイルのリストにheaderを加えることで優先 可能です.例えば,以下のようにします.
AC_CONFIG_HEADERS([config.h:config.hin]) AC_CONFIG_HEADERS([defines.h:defs.pre:defines.h.in:defs.post])こうすることで,MS-DOSでアクセスできるままにしたり,常套句をファイルに前 置したり,後置したりすることが可能になります.
headerの詳細は,See Configuration Actions.