mv *.cache.{js,woff} sub_folder - работает как команда оболочки, но не внутри Makefile

mv *.cache.{js,woff} sub_folder - работает как команда оболочки, но не внутри Makefile

После создания чего-либо makeя хочу переместить все файлы, заканчивающиеся на , .cache.{js,woff}в подпапку.

(cd $(PFROOT)/PVWR2/gwt/pdfwebviewer/; \
mkdir -p cache_files; \
mv *.cache.{js,woff} sub_folder)

Проблема в том, что при запуске makeон, похоже, интерпретируется *.cache.{js,woff}как имя файла, а не что-то динамическое, и, конечно же, нет файла с явным именем *.cache.{js,woff}. Когда я просто перехожу в папку и вручную перемещаю ее из оболочки с помощью приведенной выше команды, все работает без сбоев.

Я понимаю, что это связано с глобализацией, но не знаю, как это исправить.

решение1

{...}— это специфичный для bash синтаксис для раскрытия фигурных скобок, но /bin/shпо умолчанию вместо bash.

Из info makeраздела 5.3.2:

Программа, используемая в качестве оболочки, берется из переменной . Если эта переменная не задана в вашем makefile, то в качестве оболочки используется SHELLпрограмма ./bin/sh

Если вы хотите использовать bash для анализа конструкций оболочки в вашем Makefile, вы можете добавить следующее вверху:

SHELL := /bin/bash

Связанный контент