様々なconfigureスクリプトで,同じ特徴を繰り返し調査する(あるい は何度も一つのスクリプトを実行する)ことを避けるため,configure は,多くの調査結果をキャッシュファイル(cache file)に保存します (see Cache Files).キャッシュ可能な状態でconfigure スクリ プトを実行していてキャッシュファイルが見つかった場合,前回の実行結果を キャッシュから読み込み,これらの調査の再実行を避けます.結果として, configureは,毎回全ての調査を実行するより早くなります.
cache-idで識別した調査結果が,利用可能だということを保証します.調 査結果が読み込まれたキャッシュファイルにあり,configureに, ‘--quiet’や‘--silent’オプションが与えられていない場合,結果が キャッシュされていることを示すメッセージを出力します.それ以外では,シェ ルコマンドcommands-to-set-itを実行します.シェルコマンドを値を決定 するために実行する場合,configureが出力ファイルを作成する直前 に,値をキャッシュファイルに保存します.cache-id変数の名前を選択す る方法は,See Cache Variable Names.
commands-to-set-itは,設定された変数cache-id以外に副作 用がないはずです.以下を参照してください.
メッセージ出力に注意が必要な
AC_CACHE_VAL
のラッパーです.このマク ロは,これらのマクロを使用する最も一般的な方法に対して,便利な略記法を提 供します.それは,messageに対してAC_MSG_CHECKING
を呼び出し, その後で,cache-idとcommands引数を伴うAC_CACHE_VAL
と, cache-idを伴うAC_MSG_RESULT
を呼び出します.commands-to-set-itは,設定された変数cache-id以外に副作 用がないはずです.以下を参照してください.
commands-to-set-itでAC_DEFINE
の呼び出しを試みるため,
AC_CACHE_VAL
やAC_CACHE_CHECK
を使用しているバグの多いマクロ
を発見することはよくあります.その代わりに,AC_CACHE_VAL
を呼び出
している以下のようなコードでは,キャッシュ変数の値を調べることで,
AC_DEFINE
を呼び出すべきです.例えば,以下のマクロは駄目です.
AC_DEFUN([AC_SHELL_TRUE], [AC_CACHE_CHECK([whether true(1) works], [ac_cv_shell_true_works], [ac_cv_shell_true_works=no true && ac_cv_shell_true_works=yes if test $ac_cv_shell_true_works = yes; then AC_DEFINE([TRUE_WORKS], 1 [Define if `true(1)' works properly.]) fi]) ])
これは,キャッシュが利用可能な場合,失敗します.このマクロの二回目の実行
で,TRUE_WORKS
は定義されていないでしょう.適切な実装は以下
のようになります.
AC_DEFUN([AC_SHELL_TRUE], [AC_CACHE_CHECK([whether true(1) works], [ac_cv_shell_true_works], [ac_cv_shell_true_works=no true && ac_cv_shell_true_works=yes]) if test $ac_cv_shell_true_works = yes; then AC_DEFINE([TRUE_WORKS], 1 [Define if `true(1)' works properly.]) fi ])
また,commands-to-set-itでは,例えばAC_MSG_CHECKING
を用いて
メッセージを出力すべきではありません.調査の結果がキャッシュから取り出さ
れるか,シェルコマンドの実行で決定されるかに依存せずメッセージが出力され
るので,AC_CACHE_VAL
の呼び出しの前にしてください.