2015-11-04 5 views
-2

У меня есть цель сборки в моем make-файле, которая используется для сжатия .js-файлов, но она пытается повторно сжать файлы .min.js. Я хотел бы исключить эти .min.js-файлы из списка файлов с файлами $ (wildcard), но я не говорю о том, как это сделать.Исключить .min.js из шаблона% .js в makefile

Идеи?

В настоящее время этот набор, который возвращает .min.js, очевидно.

CSS_MIN := $(patsubst %.css, %.min.css, $(wildcard $(CSS)/*.css)) 
JS_MIN := $(patsubst %.js, %.min.js, $(wildcard $(JS)/*.js)) 

ответ

2

Используйте $(filter-out) функцию (Text Functions):

$ (фильтр шаблон ..., текст)

Returns all whitespace-separated words in text that do match any of the pattern words, removing any words that do not match. The patterns are written using ‘%’, just like the patterns used in the patsubst function above. 

$ (фильтр-аут шаблон ..., текст)

Возвращает всех белых разделенные по тем же точкам слова в тексте, которые не соответствуют ни одному из слов шаблона, удаляя слова, соответствующие одному или нескольким. Это полная противоположность функции фильтра.

Например, если:

objects=main1.o foo.o main2.o bar.o 
mains=main1.o main2.o 

следующих генерирует список, который содержит все объектные файлы, а не в 'сети':

$(filter-out $(mains),$(objects)) 

Так используйте

JS_MIN := $(patsubst %.js, %.min.js, $(filter-out %.min.js,$(wildcard $(JS)/*.js))) 

или

JS_MIN := $(filter-out %.min.min.js,$(patsubst %.js, %.min.js, $(wildcard $(JS)/*.js))) 
+0

Фантастично, спасибо! Я испортил это, получив $ (wildcard) как в первом, так и во втором параметрах в фильтрах с * .min.js и * .js – camflan

+1

Указав, что вы попытались «отфильтровать» в своем вопросе, лучший вопрос и показал больше «исследовательских усилий». –

+0

справедливо, спасибо – camflan

Смежные вопросы