make コマンドでは、引数として、マクロ定義、オプション、記述ファイル名、ターゲットファイル名を以下の形式で指定します。
$ make [ options ] [ macro definitions and targets ]
以下に、各引数の意味を説明します。
まず、すべてのマクロ定義の引数 (= 記号が組み込まれた引数) が解析され、値が割り当てられます。コマンド行のマクロは、記述ファイル中の対応する定義を無効にします。次にオプションの引数が調べられます。使用可能なオプションは、以下のとおりです。
呼び出したコマンドが返すエラーコードを無視します。.IGNORE というターゲット名が記述ファイルに記述されている場合に、このモードになります。
サイレントモードです。実行前にコマンド行を出力しません。.SILENT というターゲット名が記述ファイルに記述されている場合にも、このモードになります。
組み込み規則を使用しません。
実行を行わないモードです。コマンドは出力しますが、コマンドを実際には実行しません。@ 記号で始まる行も出力されます。
通常のコマンドは実行せずに、ターゲットファイルに touch コマンドを実行します (ファイルが更新されます)。
make コマンドは、ターゲットファイルが最新かどうかにより、ゼロまたはゼロ以外の状態コードを返します。
すべてのマクロ定義およびターゲットの記述を出力します。
障害が発生した場合に現在のエントリでの処理を中止しますが、現在のエントリに依存しない他の分岐では処理を続行します。
メークファイルでのマクロの割り当てよりも環境変数を優先します。
引数は、記述ファイル名とみなされます。ファイル名が - の場合は、標準入力を示します。-f に引数がない場合は、現在のディレクトリにある makefile、Makefile、s.makefile、s.Makefile のいずれかの名前のファイルが読み込まれます。記述ファイルの内容 (ある場合) は、組み込み規則よりも優先されます。以下の 2 つのターゲット名は、フラグと同様に評価されます。
ファイルを作成する際に明示的なコマンドまたは関連する組み込み規則がない場合、.DEFAULT という名前があればそれに対応するコマンドが実行されます。
Quit または Interrupt が実行された場合にこのターゲットの依存関係は削除されません。
その他の引数は、作成するターゲット名とみなされ、引数は左から右の順序で処理されます。他に引数がない場合は、記述ファイルに記述されている最初の文字が . 記号でない名前が使用されます。
環境変数は、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 フラグが有効な場合は、優先度は以下のようになります。