2015-11-04 46 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