制作/最小化已更改的JS文件

时间:2012-01-25 20:32:26

标签: javascript makefile

我正在尝试学习Make并在我的应用程序中构建一个Makefile,以帮助我构建和最小化我的.js文件,以便稍后使用组合加载器服务器应用程序。

我想要完成的是,当我运行make时,它将仅复制到自上次运行以来已更改的.js文件的构建目录,然后缩小该文件并生成-min。 js复制。最后,我需要始终确保生成一个新的meta.js文件。

我已经粘贴了我在下面工作的内容,但问题是它不是只选择已更改的.js文件,而是每次运行时都会选择每个文件。我错过了如何让Make在这个例子中只选择已更改的文件。

BOOKIE_JS = bookie/static/js/bookie
JS_BUILD_PATH = bookie/static/js/build
JS_META_SCRIPT = scripts/js/generate_meta.py

jsbuild: $(JS_BUILD_PATH)/bookie/meta.js

clean_js:
    rm -rf $(JS_BUILD_PATH)/*

$(JS_BUILD_PATH)/bookie/meta.js: $(BOOKIE_JS)/y*-min.js
    $(JS_META_SCRIPT) -n YUI_MODULES -s $(BOOKIE_JS)/y* -o $(JS_BUILD_PATH)/bookie/meta.js

$(BOOKIE_JS)/y*-min.js: $(BOOKIE_JS)/y*.js
    scripts/js/jsmin_all.py $(JS_BUILD_PATH)/bookie

    # this is the part that runs for each .js file and I'd like it to only run for the *modified* files
$(BOOKIE_JS)/y*.js: $(JS_BUILD_PATH)/bookie
    cp $@ $(JS_BUILD_PATH)/bookie/

$(JS_BUILD_PATH)/bookie:
    mkdir $(JS_BUILD_PATH)/bookie

clean: clean_js

.PHONE: clean clean_js

当前输出:

cp bookie/static/js/bookie/yapi.js bookie/static/js/build/bookie/
cp bookie/static/js/bookie/ymodel.js bookie/static/js/build/bookie/
cp bookie/static/js/bookie/ytagcontrol.js bookie/static/js/build/bookie/
cp bookie/static/js/bookie/yview.js bookie/static/js/build/bookie/
scripts/js/jsmin_all.py bookie/static/js/build/bookie
scripts/js/generate_meta.py -n YUI_MODULES -s bookie/static/js/bookie/y* -o bookie/static/js/build/bookie/meta.js

我只想查看已更改文件的cp。

1 个答案:

答案 0 :(得分:3)

我认为您打算制作pattern rule,但使用了错误的语法。例如,这个:

$(BOOKIE_JS)/y*-min.js: $(BOOKIE_JS)/y*.js
    scripts/js/jsmin_all.py $(JS_BUILD_PATH)/bookie

表示每个$(BOOKIE_JS)/y*-min.js文件都依赖于$(BOOKIE_JS)/y*.js个文件 - 所有这些文件,而不仅仅是具有相似名称的文件。如果你这样做:

$(BOOKIE_JS)/y%-min.js: $(BOOKIE_JS)/y%.js
    scripts/js/jsmin_all.py $(JS_BUILD_PATH)/bookie

然后必须在每一侧用相同的字符串替换%,因此例如$(BOOKIE_JS)/yapi-min.js仅取决于$(BOOKIE_JS)/yapi.js

相关问题