Подстановка расширений в список имен файлов, разделенных пробелами, является обычным требованием, и для этого есть встроенные функции. Если вы хотите добавить xв конец каждого имени в списке:
FILES_OUT = $(FILES_IN:=x)
Общий вид есть $(VARIABLE:OLD_SUFFIX=NEW_SUFFIX). Он принимает значение VARIABLEи заменяет OLD_SUFFIXв конце каждого слова, оканчивающегося этим суффиксом на NEW_SUFFIX(несоответствующие слова остаются без изменений). GNU make вызывает эту функцию (которая существует в каждой реализации make) подстановкой ссылок .
Если вы просто хотите , чтобы изменения .docв .docxи .xlsв .xlsxиспользовании этой функции вам необходимо использовать промежуточную переменную.
FILES_OUT_1 = $(FILES_IN:.doc=.docx)
FILES_OUT = $(FILES_OUT_1:.xls=.xlsx)
Вы также можете использовать немного более общий синтаксис $(VARIABLE:OLD_PREFIX%OLD_SUFFIX=NEW_PREFIX%NEW_SUFFIX). Эта функция не уникальна для GNU make, но она не так переносима, как простая замена с изменением суффикса.
Существует также функция GNU make, которая позволяет вам объединить несколько замен в одну строку: patsubstфункция .
FILES_OUT = $(patsubst %.xls,%.xlsx,$(patsubst %.doc,%.docx,$(FILES_IN)))
FILES_OUT := $(patsubst %,%x,$(FILES_IN))если правило действительно можно сделать таким общим.