### 19-3　推論規則

推論規則は、ある拡張子を持ったファイルから、別の拡張子を持ったファイルを作る時の方法を定義したファイルです。MAKEは、この推論規則にしたがって、ターゲットを更新するためのコマンドを用意し、ターゲットの依存関係を推論します。この推論規則を用いることにより、MAKEファイルの記述が簡略化できます。推論規則は、MAKEファイルまたはメイクルールファイル“MAKERULE.DEF”に記述します。

各記述ブロックの依存ファイルについて、その依存ファイルをターゲットとする記述ブロックがあるか調べ、ない場合には推論します。推論の条件は、次のようになります。

1. その依存ファイルに関する依存記述部がないこと。
2. その依存ファイルを作成するための生成規則があること。
3. その依存ファイルを作成するための依存ファイルがあること。

これらの条件が満足できた場合、MAKEは次のように記述ブロックを追加します。

1. 記述ブロックがない場合は、記述ブロックを追加する。
2. 依存ファイルとして“basename.sss”を付加する（sss：ソースファイルの拡張子）。
3. コマンド列として生成規則にあるコマンドを付加する。

#### 19-3-1　メイクルールファイル

メイクルールファイル“MAKERULE.DEF”は、MAKEが生成規則を推論するための規則を記述したもので、次の形式で表します。

>     .sss.ttt:
>            commands

1行目で2つのファイルの拡張子を指定します。“sss”は、依存ファイルの拡張子を、“ttt”は、ターゲットファイルの拡張子を指定します。拡張子には、大文字と小文字の区別がありません。“.sss”のピリオド（.）は、行の先頭でなければなりません。続く行は、コマンドブロックであり、記述内容はMAKEファイルと同じです。つまり、アセンブラソース“basename.asm”からオブジェクトファイル“basename.obj”を生成するための規則は“.asm.obj”となります。

#### メイクルールファイルの記述例

>     # *****************************************************************
>     # ***                                                           ***
>     # ***    internal generate rule for EVA86000 utility make.      ***
>     # ***    definition for M86K                                    ***
>     # ***                                                           ***
>     # *****************************************************************
>             ASM = m86k

>     .ASM.OBJ:
>             $ (ASM) $*;

>     .TARGET: .EVA .HEX            ←　デフォルト最終ターゲットの指定
>     .DEFAULT:
>             @echo --------------------------------
>             @echo ??? Undefined build commands ???
>             @echo --------------------------------
>     # end of makerule.def

#### メイクルールファイルを利用したMAKEファイルの記述例

>     ASM  = m86k                     # LC86000 シリーズ アセンブラ
>     LINK = l86k/p                   # LC86000 シリーズ リンカ

>     all : sample.eva

>     sample.obj : $*.asm
>                                          ← アセンブラ コマンドの記述を省略
>     sample.eva : $*.obj $*.opt $*.cgr
>         $ (LINK) $*;

[←] | [INDEX] | [→]