次: Caching Results, 前: Defining Symbols, 上: Results
テストの結果を記録するもう一つの方法は,出力変数(output variables) を設定することで,それは,configureが出力したファイルの中に, シェル変数の値を代入することです.以下の二つのマクロで新しい出力変数を作 ります.利用可能な出力変数のリストは,See Preset Output Variables.
シェル変数から出力変数を作成します.
AC_OUTPUT
は,出力ファイルの変 数variableに代入します(通常,一つ以上のMakefileです).これ は,AC_OUTPUT
が呼び出されたとき,入力ファイルの `@variable@'のインスタンスをシェル変数variableが持つ 値でAC_OUTPUT
が置換することを意味します.variableのこの値は 改行のリテラルを含むべきではありません.valueが与えられている場合,さらにそれもvariableに渡されます.
シェル変数から出力ファイルを作成するもう一つの方法です.
AC_OUTPUT
で,シェル変数variableで名付けられたファイルの内容を出力ファイルに 挿入します(代入ではありません).これは,AC_OUTPUT
が呼び出されたと き,シェル変数variableの名前のファイルの内容で, (Makefile.in)のような出力ファイルの`@variable@'のイ ンスタンスを,AC_OUTPUT
が置換することを意味します.挿入するファイ ルがない場合には,変数/dev/null に設定します.このマクロは,Makefileに特別な依存を含むフラグを挿入したり,特定 のホストやターゲットのための
make
ディレクティブをMakefileに 挿入するとき役に立ちます.例えば,configure.ac に以下を含ませます.AC_SUBST_FILE(host_frag) host_frag=$srcdir/conf/sun4.mhそしてMakefile.inに以下を含ませます.
@host_frag@
異なる環境変数でconfigureを実行することは非常に危険です.例え ば,ユーザが`CC=bizarre-cc ./configure'を実行した場合,キャッシュ, config.h,そして多くの出力ファイルは,Cコンパイラが bizarre-ccだということに依存します.理由があって,ユーザが再び ./configureを実行した場合や,`./config.status --recheck' でそれが実行される場合(See Automatic Remaking. see config.status Invocation),コンフィグレーションは矛盾し,二つの異なるコンパイラに依存 した結果で構成されます.
上記の`CC'のように,この状況に影響する環境変数は貴重な変数
(precious variables)と命名されていて,AC_ARG_VAR
のようなもので宣
言することが可能です.
variableを貴重な変数として宣言し,`./configure --help'の可変 部分にそのdescriptionを含めます.
貴重とは,以下のことを意味します.
- variableが
AC_SUBST
されていること.- configureが開始されたとき,variableの値は,コマンドライ ンで指定されておらず環境変数で指定されている場合も含めて,キャッシュに保 存されません.実際,configureは`./configure CC=bizarre-cc'の
CC
の定義に注目できますが,`CC=bizarre-cc ./configure'のものには注意できません.そして,残念ながらほとんどのユーザ がそうしています.それは,保存されるvariableの初期値ですが, configureの実行中は見つからないことを強調しておきます.実際, `./configure FOO=foo'と指定することと,`./configure'に
FOO
がfoo
だと分からせることは,かなり違った結果になるはずで す.- variableは二回のconfigureの実行の間の整合性を調査されま す.例えば,以下のようにします.
$ ./configure --silent --config-cache $ CC=cc ./configure --silent --config-cache configure: error: `CC' was not set in the previous run configure: error: changes in the environment can compromise \ the build configure: error: run `make distclean' and/or \ `rm config.cache' and start overそして,それは変数を未設定にする場合や,その内容が変更される場合も似たよ うなものです.
- variableは,自動的な再コンフィグレーションの間,コマンド引数として 渡されているかのように保存され,キャッシュを使用していないときもそうなり ます.
$ CC=/usr/bin/cc ./configure undeclared_var=raboof --silent $ ./config.status --recheck running /bin/sh ./configure undeclared_var=raboof --silent \ CC=/usr/bin/cc --no-create --no-recursion