Das Ersetzen von Erweiterungen in einer Liste von durch Leerzeichen getrennten Dateinamen ist eine häufige Anforderung, und dafür gibt es integrierte Funktionen. Wenn Sie xam Ende jedes Namens in der Liste einen hinzufügen möchten :
FILES_OUT = $(FILES_IN:=x)
Die allgemeine Form ist $(VARIABLE:OLD_SUFFIX=NEW_SUFFIX). Dies nimmt den Wert von an VARIABLEund ersetzt ihn OLD_SUFFIXam Ende jedes Wortes, das mit diesem Suffix endet, durch NEW_SUFFIX(nicht übereinstimmende Wörter bleiben unverändert). GNU make ruft diese Funktion (die in jeder make Implementierung vorhanden) Referenzen Substitution .
Wenn Sie nur ändern wollen .docin .docxund .xlsin der .xlsxVerwendung dieser Funktion benötigen Sie eine Zwischengröße zu verwenden.
FILES_OUT_1 = $(FILES_IN:.doc=.docx)
FILES_OUT = $(FILES_OUT_1:.xls=.xlsx)
Sie können auch die etwas allgemeinere Syntax verwenden $(VARIABLE:OLD_PREFIX%OLD_SUFFIX=NEW_PREFIX%NEW_SUFFIX). Diese Funktion ist nicht nur für GNU make verfügbar, aber nicht so portabel wie die einfache Substitution, die das Suffix ändert.
Es gibt auch eine GNU-Make-Funktion, mit der Sie mehrere Substitutionen in derselben Zeile verketten können: die patsubstFunktion .
FILES_OUT = $(patsubst %.xls,%.xlsx,$(patsubst %.doc,%.docx,$(FILES_IN)))
FILES_OUT := $(patsubst %,%x,$(FILES_IN))wenn die Regel wirklich so allgemein gehalten werden kann.