Подстановка расширений в список имен файлов, разделенных пробелами, является обычным требованием, и для этого есть встроенные функции. Если вы хотите добавить 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))
если правило действительно можно сделать таким общим.$(VARIABLE:OLD_SUFFIX=NEW_SUFFIX)
, о чем еще вы говорите?