【问题标题】:Exclude .min.js from wildcard %.js in makefile从 makefile 中的通配符 %.js 中排除 .min.js
【发布时间】:2015-11-04 19:36:06
【问题描述】:

我的 makefile 中有一个构建目标,用于压缩 .js 文件,但它正在尝试重新压缩 .min.js 文件。我想从我的 $(wildcard) 文件列表中排除那些 .min.js 文件,但我对如何执行此操作一无所知。

想法?

目前有这个集合,显然返回 .min.js。

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

【问题讨论】:

    标签: unix makefile wildcard gnu


    【解决方案1】:

    使用$(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
    

    下面会生成一个列表,其中包含所有不在“mains”中的目标文件:

    $(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)))
    

    【讨论】:

    • 太棒了,谢谢!我在使用 *.min.js 和 *.js 进行过滤时在第一个和第二个参数中都有 $(wildcard) 把这个搞砸了
    • 表明您在问题中尝试了filter-out 会提出更好的问题并显示更多的“研究努力”。
    猜你喜欢
    • 2014-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-11
    • 1970-01-01
    • 2010-12-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多