Как изменить расширение каждого файла в списке с несколькими расширениями в GNU make?
в GNU makefile мне интересно, можно ли с помощью ввода списка файлов сделать вывод списка файлов с новыми расширениями.
во входных данных, я получаю этот список:
FILES_IN=file1.doc file2.xls
и я хотел бы построить эту переменную в моем makefile из FILES_IN переменной:
FILES_OUT=file1.docx file2.xlsx
это возможно ? Как ?
это довольно сложно, потому что мне нужно разобрать список файлов и обнаружить каждое расширение (.доктор. ,xls), чтобы заменить его, чтобы исправить расширение.
1 ответ:
замена расширений в списке разделенных пробелами имен файлов является общим требованием, и для этого есть встроенные функции. Если вы хотите добавить
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, но она не так переносима, как простая замена суффикса.появилась функция операционной системы, которая позволяет многократные цепи замены в одной строке: the
patsubstфункции.FILES_OUT = $(patsubst %.xls,%.xlsx,$(patsubst %.doc,%.docx,$(FILES_IN)))