環境変数は、make の実行ごとに読み取られ、マクロ定義に追加されます。これを正しく実行するためには、優先度が重要です。以下では、make と環境変数との相互作用を説明しています。MAKEFLAGS
というマクロは、make が管理しています。このマクロは、入力フラグ引数を (マイナス記号を除いて) 連結した文字列として定義されます。このマクロはエクスポートされるため、make の再帰的呼び出しでアクセスできます。メークファイルでのコマンド行のフラグおよび割り当てにより、MAKEFLAGS
が更新されます。したがって、make による環境変数の処理を理解するには、MAKEFLAGS
マクロ (環境変数) を考慮する必要があります。
make の実行時に、make は以下の順序でマクロ定義を割り当てます。
MAKEFLAGS
環境変数を読み取ります。この環境変数が存在しない、または NULL の場合は、make の内部変数の MAKEFLAGS が NULL 文字列に設定されます。それ以外の場合は、MAKEFLAGS
に含まれる各文字が入力フラグ引数とみなされて処理されます (ただし、-f、-p、-r フラグを除きます)。
マクロ定義の内部リストを読み取ります。
環境変数を読み取ります。環境変数はマクロ定義として扱われ、(シェルにおいて) エクスポート済みとして処理されます。
メークファイルを読み取ります。メークファイルでの割り当ては、環境変数よりも優先されます。これは、メークファイルが読み込まれて実行されたときに処理内容がわかるようにするためです。つまり、-e フラグが使用されている場合を除き、記述ファイルでの記述通りに処理が実行されます。-e は入力フラグ引数で、環境変数がメークファイルでのマクロの割り当てよりも優先されるように指定します。したがって、-e を使用すると、環境変数がメークファイルでの定義よりも優先されます。また、MAKEFLAGS
が割り当てられている場合は、それが環境変数よりも優先されます。これは、現在のメークファイルから make をさらに呼び出す場合に便利です。
以下に、割り当ての優先度を低いものから高いものの順に示します。
内部定義
環境変数
メークファイル
コマンド行
-e フラグが有効な場合は、優先度は以下のようになります。