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