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 xal 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 VARIABLEy reemplaza OLD_SUFFIXal 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 .docen .docxy .xlsen .xlsxel 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 patsubstfunció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?