サフィックスのあるファイルをそのサフィックスのないファイルに変換する一連のルールを作成でき.inます。
古典的な表記法では、次のようになります。
# Not functional — see discussion
.SUFFIXES: .in # Add .in as a suffix
M4 = m4
M4FLAGS =
M4SCRIPT = xyz.m4
.in:
${M4} ${M4FLAGS} ${M4SCRIPT} $< > $*
これは.in認識された接尾辞として追加.inされ、3 つのマクロで指定されたコマンドを使用して、接尾辞のあるファイルをファイルなしで変換することを示します。は、拡張子$<付きのファイルの名前です.in。the$*は、拡張子を除いたファイルの名前です。
残念ながら、この表記法は、変換するファイルが などの名前を持ち、xyz.inに変換する必要がある場合にのみ機能しますxyz。xyz.h.inに変換する必要がある場合には機能しませんxyz.h。
.h.in接尾辞がとであることを指定することは可能ですが、2 つの間の変換規則はと で.h始まり、混乱します。.h.in.h:make
ただし、GNU make には、これに対応できるサフィックス規則を定義するための代替表記法があります。
.SUFFIXES: .h.in .h # Add .h.in and .h as suffixes
M4 = m4
M4FLAGS =
M4SCRIPT = xyz.m4
%.h: %.h.in
${M4} ${M4FLAGS} ${M4SCRIPT} $< > $*.h
この%.h: %.h.in行は、2 つのドットでサフィックスを処理できます。.c.in唯一の煩わしさは、または.y.inまたはなどの拡張子ごと.mk.inに、同様のマッピングを提供する必要があることです。
(Mac OS X 10.7.4 でテスト済み。その makefile がxyz.mkの場合、空のファイルを作成してxyz.h.inから実行するmake -n -f xyz.mk xyz.hと、ビルドがコマンドを実行することがわかりますm4 xyz.m4 xyz.h.in > xyz.h。)