次: Setting Output Variables, 上: Results
特徴テストからの応答を受けとる通常の動作は,テストの結果を示すCプリプロ
セッサシンボルを定義することです.それはAC_DEFINE
や
AC_DEFINE_UNQUOTED
と呼ばれるもので行います.
デフォルトで,AC_OUTPUT
はマクロが定義したシンボルを,出力変数
DEFS
に配置し,それはそれぞれのシンボルに対する
-Dsymbol=valueを含んでいます.Autoconfバージョン1
と異なり,configureが実行中に定義する変数DEFS
はありませ
ん.Autoconfマクロが,あるCプリプロセッサシンボルを既に定義しているかど
うか調査するため,以下の例のように,適切なキャッシュ変数の値をテストして
ください.
AC_CHECK_FUNC(vprintf, [AC_DEFINE(HAVE_VPRINTF)]) if test "$ac_cv_func_vprintf" != yes; then AC_CHECK_FUNC(_doprnt, [AC_DEFINE(HAVE_DOPRNT)]) fi
AC_CONFIG_HEADERS
が呼び出された場合,DEFS
を作成する代わり
に,AC_OUTPUT
でテンプレートファイルに#define
文で正しい値を
代入したヘッダファイルを作成します.この種類の出力の詳細は,
See Configuration Headers.
Cプリプロセッサ変数variableをvalueに(そのまま)定義します. valueは改行のリテラルを含むべきではなく,
AC_CONFIG_HEADERS
を使用しない場合,makeが処理してしまうので,`#'文字を含め るべきではありません.シェル変数(M4の引用符文字`['や`]'を含む 定義値が必要なもの)を使用するために,代わりにAC_DEFINE_UNQUOTED
を 使用してください.descriptionは,AC_CONFIG_HEADER
を使用す る場合だけ役に立ちます.この場合, descriptionは,生成された config.h.inに,マクロ定義前のコメントとして書き込まれます.以下の 例は,Cプリプロセッサ変数EQUATION
を文字定数`"$a > $b"'と定 義します.AC_DEFINE(EQUATION, "$a > $b")valueもdescriptionも与えられていない場合,valueのデフォ ルトは空の文字列ではなく1になります.これは古いバージョンのAutoconfの下 位互換性のためですが,この使用方法は時代遅れで,Autoconfの将来のバージョ ンでは無くなるかもしれません.
AC_DEFINE
に似ていますが,variableとvalueで,三つのシェ ル展開が — 一度に — 実行されます.変数の展開(`$'),コマンドの置 換(``'),そしてバックスラッシュエスケープ(`\')です.値の中のシ ングルクオートとダブルクオートの文字列,特別な意味を持ちません. variableや valueがシェル変数のときは,AC_DEFINE
の代わ りにこのマクロを使用してください.以下がその例です.AC_DEFINE_UNQUOTED(config_machfile, "$machfile") AC_DEFINE_UNQUOTED(GETGROUPS_T, $ac_cv_type_getgroups) AC_DEFINE_UNQUOTED($ac_tr_hdr)
Bourneシェルの構文の特異性のため,他のマクロから呼び出しやシェルコードと
AC_DEFINE
やAC_DEFINE_UNQUOTED
を分けるために,セミコロンを
使用しないでください.そうすると,configureスクリプトの結果と
して構文エラーの原因となります.以下のようにします.
AC_CHECK_HEADER(elf.h, [AC_DEFINE(SVR4) LIBS="$LIBS -lelf"])
あるいは以下のようにします.
AC_CHECK_HEADER(elf.h, [AC_DEFINE(SVR4) LIBS="$LIBS -lelf"])
それらは以下の代わりのものです.
AC_CHECK_HEADER(elf.h, [AC_DEFINE(SVR4); LIBS="$LIBS -lelf"])