VAR=value ./configure
は./configure VAR=value
と同じですか?
最初のケースでは、シェルが環境変数を設定し、2番目のケースでは、configureスクリプトが文字列'VAR=value'
を引数として取り、おそらく変数を設定します。 configureが変数に対して他に何かをするのではないか(一部の値を無視またはフィルタリングする可能性があります)、なぜそもそも変数を引数として取るのでしょうか。
この場合
_VAR=value ./configure
_
この動作は現在のシェルに依存しますが、
_./configure VAR=value
_
動作はconfigure-scriptに依存します。開発者の中には、外部からスクリプトの変数を魔法のように設定するのではなく、スクリプト内で変数を設定するかどうかを選択するため、後者を好む人もいます。
実際には、ほとんど違いはありません。
たとえば、bash構成スクリプトの_--help
_メッセージは次のように表示されます。
_Some influential environment variables:
DEBUGGER_START_FILE
location of bash debugger initialization file
CC C compiler command
CFLAGS C compiler flags
LDFLAGS linker flags, e.g. -L<lib dir> if you have libraries in a
nonstandard directory <lib dir>
LIBS libraries to pass to the linker, e.g. -l<library>
CPPFLAGS C/C++/Objective C preprocessor flags, e.g. -I<include dir> if
you have headers in a nonstandard directory <include dir>
CPP C preprocessor
YACC The `Yet Another C Compiler' implementation to use. Defaults to
the first program found out of: `bison -y', `byacc', `yacc'.
YFLAGS The list of arguments that will be passed by default to $YACC.
This script will default YFLAGS to the empty string to avoid a
default value of `-d' given by some make applications.
_
どちらの場合も、変数worksを設定するいずれかの方法です。
しかし、誰かが物事を「改善する」ことを決定した場合に備えて、開発者の好みに留意してください。
参考文献:
./configure
_ に環境変数を渡すconfig.status
_に入れるために後者(VAR = value)が必要であることを示していますAC_ARG_VAL
_について説明します(開発者の好みを表現します):_
AC_ARG_VAR
_マクロは、特定の(環境)変数をスクリプトの引数として宣言するために使用され、説明と特定の用途を与えます。この機能はautoconfの歴史の中で比較的最近追加されましたですが、それは本当に重要です。最近の存在を反映して、マクロは_AS_HELP_STRING
_ヘルパーを必要とせず、2つのパラメーター(変数の名前と./configure --help中に出力される文字列)のみを取ります。
AC_ARG_VAR(var-name, help-string)
そして長年の実践についてのコメントを続けます:
デフォルトでは、configureは他のshスクリプトと同様に環境から変数を取得します。それらのほとんどは無視されます。ないものは、このマクロで宣言する必要があります。このようにして、それらは貴重な変数としてマークされます。
貴重なものとしてマークされた変数は、明示的に_
AC_SUBST
_を呼び出す必要なしにMakefile.inで置き換えられますを取得しますが、これは定義の最も重要な部分ではありません。重要なのは、変数がキャッシュされることです。
AC_ARG_VAR
_を説明し、開発者の好みを再度表現します。:Configureが起動されたときの変数の値は、コマンドラインではなく環境を介して指定された場合を含め、キャッシュに保存されます。実際、configureはCCの定義を「./configure CC = bizarre-cc」で認識できますが、「CC = bizarre-cc ./configure」でそれを認識することはできません。これは残念ながら、ほとんどのユーザーが行っていることです。