### 3.8 Makefileの解析

GNU `make`はmakefileを1行ずつ解析します。解析は次の手順で進みます。

1. バックスラッシュでエスケープされた行を含む、完全な論理行を読み込みます（{{0|長い行の分割}}を参照）。
2. コメントを取り除きます（{{1|Makefileに含まれるもの}}を参照）。
3. 行がレシピの接頭文字で始まり、現在ルールの文脈にいる場合は、その行を現在のレシピに追加し、次の行を読み込みます（{{2|レシピの構文}}を参照）。
4. 行の中で*即時*展開の文脈にある要素を展開します（{{3|makeによるMakefileの読み込み}}を参照）。
5. 行を走査して`:`や`=`などの区切り文字を探し、その行がマクロへの代入かルールかを判定します（{{4|レシピの構文}}を参照）。
6. 得られた操作を内部に取り込み、次の行を読み込みます。

この方式の重要な帰結は、*1行であるなら*、マクロを完全なルールに展開できるということです。次の例は動作します。

しかし、次の例は動作しません。`make`は、行を展開した後に、再び行に分割することはないからです。

上のmakefileでは、レシピを持つルールではなく、`target: echo built`と書かれているかのように、前提条件が`echo`と`built`であるターゲット`target`が定義されます。展開が完了した後も行の中に残っている改行は、通常の空白類として無視されます。

複数行のマクロを正しく展開するには、`eval`関数を使う必要があります。これにより、展開されたマクロの結果に対して`make`のパーサーが実行されます（{{0|eval関数}}を参照）。
