Makefile:如何连接,替换和放入新文件?

时间:2015-11-14 15:02:54

标签: build makefile

更新

最后,我想出了一个闪亮的美丽构建Makefile。如果你想看看这个要点 - https://gist.github.com/jonataswalker/5961bfcc0f335f3b51ea

连接我可以做的一些文件:

# JS files
JS_TARGETS = wrapper.js \
             file1.js \
             file2.js

combine-js:
    @cat $(JS_TARGETS) > file-combined.js

但这不是我想要/需要的。我的wrapper.js就像:

(function(Foo, win, doc){
  'use strict';

  /*{CODE_TO_BE_REPLACED}*/

})(window.Foo = window.Foo || {}, window, document);

所以我需要把我的其他文件放在wrapper.js里面。之后我将运行jshintuglify,但这是另一个问题。

2 个答案:

答案 0 :(得分:1)

最简单的方法是将cat wrapper_head.js file1.js file2.js wrapper_tail.js > file-combined.js 分成两部分 - 头部和尾部 - 然后按严格顺序连接,例如:

resolvers += "Scalaz Bintray Repo" at "http://dl.bintray.com/scalaz/releases"

答案 1 :(得分:1)

这应该这样做 - 但它使用perl

JS_WRAPPED_SOURCES = file1.js file2.js
JS_WRAPPER = wrapper.js
JS_SOURCES = $(JS_WRAPPER) $(JS_WRAPPED_SOURCES)

combined.js: $(JS_SOURCES)
        cat $< | perl -e '$$c=join("\n",<>); $$c =~ s/{CODE_TO_BE_REPLACED}/`cat $(JS_WRAPPED_SOURCES)`/e; print $$c' \
         > $@

由于您正在运行jshintuglify,我猜您正在使用Grunt。 在这种情况下,我建议您使用像grunt-replace这样的Grunt任务。