configureが変数を引数として取るのはなぜですか?


10

VAR=value ./configure同じ./configure VAR=valueですか?

最初のケースでは、シェルが環境変数を設定し、2番目のケースでは、configureスクリプトが'VAR=value'引数として文字列を受け取り、おそらく変数を設定します。configureが変数に対して他に何かを行うのか(おそらく一部の値を無視またはフィルタリングする)、なぜそもそも変数を引数として取るのかと思います。

回答:


12

この場合

VAR=value ./configure

この動作は現在のシェルに依存しますが、

./configure VAR=value

動作はconfigure-scriptに依存します。開発者の中には、外部からスクリプトの変数を魔法のように設定するのではなく、スクリプト内で変数を設定するかどうかを選択するため、後者を好む人もいます。

実際には、ほとんど違いはありません。

  • 構成を行うほとんどの人はPOSIXシェルから実行しており、以前の動作は「そのまま」機能します。
  • ほとんどの構成スクリプトは、既存の環境変数の設定を解除しません。
  • 従来の環境変数(automake以外)は、長い間使用されてきました。

たとえば、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.

どちらの場合も、変数を設定するどちらの方法でも機能します。

しかし、誰かが物事を「改善する」ことを決定した場合に備えて、開発者の好みを覚えておいてください。

参考文献:

AC_ARG_VARマクロはそれを説明し、特定の用途を与える、スクリプトの引数として特定の(環境)変数を宣言するために使用されます。この機能はautoconfの歴史の中で比較的最近追加れましたが、それは本当に重要です。最近の存在を反映して、マクロはAS_HELP_STRINGヘルパーを必要とせず、2つのパラメーター(変数の名前と./configure --help中に出力される文字列)のみを取ります。

AC_ARG_VAR(var-name, help-string)

そして長年の実践についてのコメントを続けます:

デフォルトでは、configureは他のshスクリプトと同様に環境から変数を取得します。それらのほとんどは無視されます。ないものは、このマクロで宣言する必要があります。このようにして、それらは貴重な変数としてマークされます。

貴重とマークされた変数は、明示的なを呼び出さなくてもMakefile.inで置き換えられますAC_SUBSTが、これは定義の最も重要な部分ではありません。重要なのは、変数がキャッシュされることです。

  • 7.2出力変数の設定(autoconfドキュメンテーション)
    AC_ARG_VAR、開発者の好みを再び表現しています。

    configureが起動されたときの変数の値は、コマンドラインではなく環境を介して指定された場合を含め、キャッシュに保存されます。実際、configureは './configure CC = bizarre-cc'でCCの定義に気づくことができますが、 'CC = bizarre-cc ./configure'でそれを認識することはできません。これは残念ながらほとんどのユーザーが行っていることです。


また、どのようにenv VAR=value ./configure関連するかを説明することもできますVAR=value ./configure
Kusalananda
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.