Zastępowanie rozszerzeń na liście nazw plików oddzielonych białymi znakami jest powszechnym wymaganiem i są do tego wbudowane funkcje. Jeśli chcesz dodać xna końcu każdej nazwy na liście:
FILES_OUT = $(FILES_IN:=x)
Ogólna forma to $(VARIABLE:OLD_SUFFIX=NEW_SUFFIX). Przyjmuje wartość VARIABLEi zamienia OLD_SUFFIXna końcu każdego słowa, które kończy się tym przyrostkiem NEW_SUFFIX(słowa niepasujące pozostają niezmienione). GNU wywołuje tę funkcję (która istnieje w każdej implementacji make) odniesienia do zastępowania .
Jeśli chcesz tylko do zmian .docw .docxi .xlsdo .xlsxkorzystania z tej funkcji, należy użyć zmiennej pośredniej.
FILES_OUT_1 = $(FILES_IN:.doc=.docx)
FILES_OUT = $(FILES_OUT_1:.xls=.xlsx)
Możesz także użyć nieco bardziej ogólnej składni $(VARIABLE:OLD_PREFIX%OLD_SUFFIX=NEW_PREFIX%NEW_SUFFIX). Ta funkcja nie jest unikalna dla make GNU, ale nie jest tak przenośna jak zwykłe podstawianie zmieniające sufiksy.
Istnieje również funkcja GNU make, która pozwala łączyć wiele podstawień w tej samej linii: patsubstfunkcja .
FILES_OUT = $(patsubst %.xls,%.xlsx,$(patsubst %.doc,%.docx,$(FILES_IN)))
FILES_OUT := $(patsubst %,%x,$(FILES_IN))jeśli reguła naprawdę może być tak ogólna.