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 x
am 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 VARIABLE
und ersetzt ihn OLD_SUFFIX
am 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 .doc
in .docx
und .xls
in der .xlsx
Verwendung 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 patsubst
Funktion .
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.$(VARIABLE:OLD_SUFFIX=NEW_SUFFIX)
, worauf beziehen Sie sich sonst noch?