La substitution des extensions dans une liste d'espaces séparés les noms de fichiers est une exigence commune, et il y a des fonctions intégrées pour cela. Si vous souhaitez ajouter un x
à la fin de chaque nom dans la liste:
FILES_OUT = $(FILES_IN:=x)
La forme générale est - $(VARIABLE:OLD_SUFFIX=NEW_SUFFIX)
. Cela prend la valeur de VARIABLE
et remplace OLD_SUFFIX
à la fin de chaque mot qui se termine avec ce suffixe NEW_SUFFIX
(non-mots correspondants sont laissés inchangés). GNU faire des appels de cette fonction (qui existe en tout faire de la mise en œuvre) des références de substitution.
Si vous souhaitez simplement modifier l' .doc
en .docx
et .xls
en .xlsx
l'utilisation de cette fonctionnalité, vous devez utiliser une variable intermédiaire.
FILES_OUT_1 = $(FILES_IN:.doc=.docx)
FILES_OUT = $(FILES_OUT_1:.xls=.xlsx)
Vous pouvez également utiliser un peu plus en général de la syntaxe $(VARIABLE:OLD_PREFIX%OLD_SUFFIX=NEW_PREFIX%NEW_SUFFIX)
. Cette fonctionnalité n'est pas unique à GNU make, mais il n'est pas aussi portable que la plaine suffixe-changement de substitution.
Il y a aussi un GNU make fonctionnalité qui vous permet de chaîner plusieurs substitutions sur la même ligne: l' patsubst
fonction.
FILES_OUT = $(patsubst %.xls,%.xlsx,$(patsubst %.doc,%.docx,$(FILES_IN)))