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

Unix 从makefile中的通配符%.js中排除.min.js,unix,makefile,wildcard,gnu,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)) 使用$(过滤)函数

我的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))
使用
$(过滤)
函数():

$(过滤模式…,文本)

$(过滤掉模式…,文本)

返回文本中与任何模式词不匹配的所有空格分隔词,删除与一个或多个模式词匹配的词。这与过滤器功能完全相反

例如,假设:

objects=main1.o foo.o main2.o bar.o
mains=main1.o main2.o
下面生成一个列表,其中包含所有不在“mains”中的对象文件:

$(filter-out $(mains),$(objects))
所以使用

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


太棒了,谢谢你!我搞砸了,在filter out中的第一个和第二个参数中都有$(通配符)和*.min.js和*.js,这表明您在问题中尝试了
filter out
,这会使问题变得更好,并显示出更多的“研究工作”。
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)))