次: , 上: Results


7.1 Cプリプロセッサシンボルの定義

特徴テストからの応答を受けとる通常の動作は,テストの結果を示すCプリプロ セッサシンボルを定義することです.それはAC_DEFINEAC_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.

— マクロ: AC_DEFINE (variable, value, [description])
— マクロ: AC_DEFINE (variable)

Cプリプロセッサ変数variablevalueに(そのまま)定義します. 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")
     

valuedescriptionも与えられていない場合,valueのデフォ ルトは空の文字列ではなく1になります.これは古いバージョンのAutoconfの下 位互換性のためですが,この使用方法は時代遅れで,Autoconfの将来のバージョ ンでは無くなるかもしれません.

— マクロ: AC_DEFINE_UNQUOTED (variable, value, [description])
— マクロ: AC_DEFINE_UNQUOTED (variable)

AC_DEFINEに似ていますが,variablevalueで,三つのシェ ル展開が — 一度に — 実行されます.変数の展開(`$'),コマンドの置 換(``'),そしてバックスラッシュエスケープ(`\')です.値の中のシ ングルクオートとダブルクオートの文字列,特別な意味を持ちません. variablevalueがシェル変数のときは,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_DEFINEAC_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"])