回答:
この場合
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.
どちらの場合も、変数を設定するどちらの方法でも機能します。
しかし、誰かが物事を「改善する」ことを決定した場合に備えて、開発者の好みを覚えておいてください。
参考文献:
./configure
config.status
AC_ARG_VAL
、automakeの観点から(および開発者の好みを表す)について説明しています。
AC_ARG_VAR
マクロはそれを説明し、特定の用途を与える、スクリプトの引数として特定の(環境)変数を宣言するために使用されます。この機能はautoconfの歴史の中で比較的最近追加されましたが、それは本当に重要です。最近の存在を反映して、マクロはAS_HELP_STRING
ヘルパーを必要とせず、2つのパラメーター(変数の名前と./configure --help中に出力される文字列)のみを取ります。
AC_ARG_VAR(var-name, help-string)
そして長年の実践についてのコメントを続けます:
デフォルトでは、configureは他のshスクリプトと同様に環境から変数を取得します。それらのほとんどは無視されます。ないものは、このマクロで宣言する必要があります。このようにして、それらは貴重な変数としてマークされます。
貴重とマークされた変数は、明示的なを呼び出さなくてもMakefile.inで置き換えられます
AC_SUBST
が、これは定義の最も重要な部分ではありません。重要なのは、変数がキャッシュされることです。
AC_ARG_VAR
、開発者の好みを再び表現しています。
configureが起動されたときの変数の値は、コマンドラインではなく環境を介して指定された場合を含め、キャッシュに保存されます。実際、configureは './configure CC = bizarre-cc'でCCの定義に気づくことができますが、 'CC = bizarre-cc ./configure'でそれを認識することはできません。これは残念ながらほとんどのユーザーが行っていることです。
env VAR=value ./configure
関連するかを説明することもできますVAR=value ./configure