パターン置換マクロ参照は、形式および機能が接尾辞置換の参照と同様です。パターン置換参照を使用して、接頭辞、接尾辞のいずれかまたは両方を、マクロの値中で一致する語に追加または置換できます。
パターン置換マクロ参照は、パターンマッチングの規則と同様に、旧バージョンの make で使用することはできません。
パターン置換参照は、以下の形式で記述します。
$(macro:p%s =np%ns)
ここで、p は置換対象の既存の接頭辞 (ある場合)、s は置換対象の既存の接尾辞 (ある場合)、np および ns はそれぞれ新しい接頭辞および接尾辞、% はワイルドカードです。パターン置換は、値 p%s に一致するすべての語に適用されます。
SOURCES= old_main.c old_data.c moon OBJECTS= $(SOURCES:old_%.c=new_%.o) all: @echo $(OBJECTS)
この例は、以下のような結果になります。
$ make new_main.o new_data.o moon
= 記号の右側 (置換後の語) では、ワイルドカードの % を任意の数だけ必要に応じて使用できます。以下に例を示します。
... OBJECTS= $(SOURCES:old_%.c=%/%.o)
この置換は、以下のような結果になります。
main/main.o data/data.o moon
ただし、パターン置換マクロ参照は、パターンマッチングの規則を指定しているターゲットエントリの依存関係を示す行では使用しないでください。使用した場合は、マクロとターゲット (または依存関係) のどちらにワイルドカードが適用されるかを make が特定できないため、衝突が生じます。
OBJECT= .o x: x.Z: @echo correct %: %$(OBJECT:%o=%Z)
このメークファイルは、make が x.Z から x を構築するために記述したものです。しかし、依存関係の行に複数含まれている % のうちどれをパターンマッチングの規則で使用するかを make が特定できないため、パターンマッチングの規則は認識されません。