我正在尝试学习 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。
最佳答案
我想你打算做一个 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
关于javascript - make 构建/最小化已更改的 JS 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9009829/