Заставьте подстановочные знаки работать не так, как вы думаете. Давайте начнем с этого правила:
$(JS_BUILD_PATH)/b/%.js: $(BOOKIE_JS)/$*.js
echo "Initial"
cp $? $(JS_BUILD_PATH)/b/
cp $? $(CHROME_BUILD)/
%
подразумевает, что это правило шаблона, поэтому Make ожидает соответствующий %
в списке предварительных требований. Вместо этого выглядит так, как будто вы пытаетесь использовать либо автоматическую переменную $*
(которую нельзя использовать в списке предварительных требований), либо подстановочный знак *
(который нельзя использовать без команды wildcard
) , Попробуйте это так:
$(JS_BUILD_PATH)/b/%.js: $(BOOKIE_JS)/%.js
echo "Initial"
cp $? $(JS_BUILD_PATH)/b/
cp $? $(CHROME_BUILD)/
Это работает, но только если вы точно указываете, какие файлы вы хотите; он не копирует каждый файл .js
в каталог dev (подробнее об этом позже).
Теперь для -min.js
. Я не могу точно сказать, как работает это правило, но похоже, что вы запускаете скрипт python, который действует на все файлы * .js в каталоге одновременно. Если это правильно, то не имеет смысла иметь правило, которое делает foo-min.js
из foo.js
; должно быть правило для запуска скрипта, и нам нужен список всех .js
файлов, которые ему понадобятся:
DEV_JS_FILES := $(wildcard $(BOOKIE_JS)/*.js)
BUILD_JS_FILES := $(patsubst $(BOOKIE_JS)/%.js,$(JS_BUILD_PATH)/b/%.js,$(DEV_JS_FILES))
.PHONY: min
min: $(BUILD_JS_FILES)
echo "MIN"
rm $(JS_BUILD_PATH)/b/meta.js || true
scripts/js/jsmin_all.py $(JS_BUILD_PATH)/b
Наконец, meta.js
:
$(JS_BUILD_PATH)/b/meta.js: min
echo "META"
$(JS_META_SCRIPT) -n YUI_MODULES -s $(JS_BUILD_PATH)/b/ \
-o $(JS_BUILD_PATH)/b/meta.js \
-x -min.js$
EDIT:
Я думаю, что вижу, что ты пытаешься сделать. Есть несколько способов сделать это; самое простое - объединить три правила в одно:
DEV_JS_FILES := $(wildcard $(BOOKIE_JS)/*.js)
$(JS_BUILD_PATH)/b/meta.js: $(DEV_JS_FILES)
echo "Initial"
cp $? $(JS_BUILD_PATH)/b/
cp $? $(CHROME_BUILD)/
echo "MIN"
rm $(JS_BUILD_PATH)/b/meta.js || true
scripts/js/jsmin_all.py $(JS_BUILD_PATH)/b
rm $(addprefix $(JS_BUILD_PATH)/b/,$?)
echo "META"
$(JS_META_SCRIPT) -n YUI_MODULES -s $(JS_BUILD_PATH)/b/ \
-o $(JS_BUILD_PATH)/b/meta.js \
-x -min.js
rm $(JS_BUILD_PATH)/b/*-min.js
Это будет действовать только для .js
файлов в dev, которые новее meta.js
(или всех из них, если meta.js
еще не существует).