2015-11-04 66 views
-2

我的makefile中有一個構建目標,用於壓縮.js文件,但它試圖重新壓縮.min.js文件。我想從我的$(通配符)文件列表中排除這些.min.js文件,但我在如何做到這一點上是空白的。從makefile中的通配符%.js中排除.min.js

想法?

當前有這個集合,顯然返回.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

太棒了,謝謝!我已經通過在第一個和第二個參數中使用$(通配符)過濾掉了* .min.js和* .js – camflan

+1

已經指出你在你的問題中嘗試了'filter-out'一個更好的問題,並顯示更多的「研究努力」。 –

+0

夠公平的,謝謝 – camflan