Sustituir extensiones en una lista de nombres de archivos separados por espacios en blanco es un requisito común, y hay funciones integradas para esto. Si desea agregar un x
al final de cada nombre en la lista:
FILES_OUT = $(FILES_IN:=x)
La forma general es $(VARIABLE:OLD_SUFFIX=NEW_SUFFIX)
. Toma el valor de VARIABLE
y reemplaza OLD_SUFFIX
al final de cada palabra que termina con este sufijo por NEW_SUFFIX
(las palabras que no coinciden se dejan sin cambios). GNU hace llamadas a esta característica (que existe en cada implementación de make) referencias de sustitución .
Si lo que desea es el cambio .doc
en .docx
y .xls
en .xlsx
el uso de esta función, es necesario utilizar una variable intermedia.
FILES_OUT_1 = $(FILES_IN:.doc=.docx)
FILES_OUT = $(FILES_OUT_1:.xls=.xlsx)
También puede utilizar la sintaxis un poco más general $(VARIABLE:OLD_PREFIX%OLD_SUFFIX=NEW_PREFIX%NEW_SUFFIX)
. Esta característica no es exclusiva de GNU make, pero no es tan portátil como la simple sustitución de cambio de sufijo.
También hay una característica de creación de GNU que le permite encadenar múltiples sustituciones en la misma línea: la patsubst
función .
FILES_OUT = $(patsubst %.xls,%.xlsx,$(patsubst %.doc,%.docx,$(FILES_IN)))
FILES_OUT := $(patsubst %,%x,$(FILES_IN))
si la regla realmente puede hacerse tan genérica.$(VARIABLE:OLD_SUFFIX=NEW_SUFFIX)
, ¿a qué más se refiere?