### 3.3 ほかのMakefileの読み込み

`include`ディレクティブは、現在のmakefileの読み込みを中断し、1つ以上のほかのmakefileを読み込んでから再開するよう、`make`に指示します。makefile中の、次のような行です。

`filenames`には、シェルのファイル名パターンを含められます。`filenames`が空なら、何も読み込まれず、エラーも表示されません。

行の先頭に余分なスペースを置いてもかまいません。これらは無視されます。ただし、最初の文字はタブ（または`.RECIPEPREFIX`の値）であってはいけません。タブで始まる行はレシピの行とみなされます。`include`とファイル名の間、およびファイル名同士の間には空白類が必要です。そこやディレクティブの末尾にある余分な空白類は無視されます。行末には`#`で始まるコメントを書けます。ファイル名に変数参照や関数参照が含まれている場合は、それらが展開されます。{{0|変数の使い方}}を参照してください。

たとえば、`a.mk`、`b.mk`、`c.mk`という3つの`.mk`ファイルがあり、`$(bar)`が`bish bash`に展開されるなら、次の式は、

次と同等になります。

`make`は`include`ディレクティブを処理すると、そのディレクティブを含むmakefileの読み込みを中断し、列挙された各ファイルを順番に読み込みます。それが終わると、ディレクティブのあるmakefileの読み込みを再開します。

`include`を使う場面の1つは、別々のディレクトリにある個別のmakefileで処理する複数のプログラムが、共通の変数定義（{{0|変数の設定}}を参照）やパターンルール（{{1|パターンルールの定義と再定義}}を参照）を必要とする場合です。

もう1つは、ソースファイルから前提条件を自動生成したい場合です。前提条件を、主となるmakefileから読み込むファイルに入れられます。この方法は、ほかのバージョンの`make`で従来行われていたように、何らかの方法で主となるmakefileの末尾に前提条件を追加する方法より、一般にすっきりしています。{{0|前提条件の自動生成}}を参照してください。

指定した名前がスラッシュで始まらず（GNU MakeがMS-DOS / MS-Windowsのパス対応を有効にしてコンパイルされている場合は、ドライブ文字とコロンでも始まらず）、現在のディレクトリで見つからない場合は、ほかのいくつかのディレクトリを探します。まず、`-I`または`--include-dir`オプションで指定したディレクトリを探します（{{0|オプションの一覧}}を参照）。次に、存在するなら、`prefix/include`（通常は`/usr/local/include` {{1|<sup>1</sup>}}）、`/usr/gnu/include`、`/usr/local/include`、`/usr/include`の順で探します。

`.INCLUDE_DIRS`変数には、makeが読み込むファイルを探すディレクトリの現在のリストが格納されます。{{0|その他の特殊変数}}を参照してください。

これらのデフォルトのディレクトリを探させないようにするには、コマンドラインに`-I`オプションと特殊な値`-`を追加します（例：`-I-`）。これにより、`make`はデフォルトのディレクトリを含め、すでに設定されているインクルード用ディレクトリをすべて忘れます。

読み込もうとするmakefileがこれらのどのディレクトリでも見つからなくても、ただちに致命的なエラーにはなりません。`include`を含むmakefileの処理は続きます。すべてのmakefileを読み終えると、`make`は古くなっているものや存在しないものを作り直そうとします。{{0|Makefileの再生成}}を参照してください。makefileを作り直すルールが見つからなかった場合、またはルールは見つかったもののレシピが失敗した場合に初めて、`make`はmakefileがないことを致命的なエラーと判断します。

存在しない、または作り直せないmakefileを、エラーメッセージなしで単に無視してほしい場合は、`include`の代わりに、次のように`-include`ディレクティブを使います。

これは、`filenames`のいずれか（または、そのいずれかのファイルの前提条件のいずれか）が存在しない、あるいは作り直せない場合に、エラーも警告も出さないという点を除き、すべて`include`と同じように動作します。

ほかの一部の`make`実装との互換性のため、`sinclude`も`-include`の別名になっています。

##### {{0|(1)}}

MS-DOSおよびMS-Windows向けにコンパイルされたGNU Makeは、`prefix`がDJGPPのディレクトリ階層のルートに定義されているかのように動作します。
