从makefile中的通配符%.js中排除.min.js

时间:2015-11-04 19:36:07

标签: unix makefile wildcard gnu

我的makefile中有一个构建目标,用于压缩.js文件,但它试图重新压缩.min.js文件。我想从我的$(通配符)文件列表中排除那些.min.js文件,但是我知道如何执行此操作。

想法?

目前有这个设置,显然会返回.min.js。

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

1 个答案:

答案 0 :(得分: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)))