我很困惑。我见过一些类似的问题,但没有一个能解决我的问题;所以我有这个在线抓取的脚本,通过运行makefile自动压缩javascript文件:
concatenated.min.js: file1.js file2.js
java -jar ~/bin/compiler.jar $(addprefix --js=,$^) >$@
我这个make文件在这里
JS_TARGETS = a.js b.js c.js d.js
CLOSURE = java -jar ~/bin/compiler.jar
CLOSURE_FLAGS =
JS_MINIFIED = $(JS_TARGETS:.js=.min.js)
JS_GZIP = $(JS_TARGETS:.js=.js.gz)
JS_MIN_GZIP = $(JS_TARGETS:.js=.min.js.gz)
js: $(JS_TARGETS) $(JS_MINIFIED) $(JS_GZIP) $(JS_MIN_GZIP)
%.min.js: %.js
$(CLOSURE) $(CLOSURE_FLAGS) --js=$< >$@
在与a.js,b.js,c.js和d.js相同的目录中,我有一个文件concat.min.js。然后,我运行make concat.min.js
并且makefile给了我“没有为concat.min.js做任何事情”。
我还认为问题是因为我错过了$(addprefix --js=,$^) >$@
规则中的%.min.js
部分。但是,即使我将其添加到规则中,它似乎仍然给我同样的错误。我做错了什么/错字?感谢。
答案 0 :(得分:1)
如果您没有concat.js文件,可能会发生这种情况。
答案 1 :(得分:1)
%.min.js: %.js
行所说的是“如果文件foo.js比foo.min.js更新,那么foo.min.js已经过时了,以下是如何更新它” 。因此,如果您说make a.min.js
,make会发现您(可能)没有a.min.js
文件,所以它肯定不比a.js
新,所以它会使它使用makefile中的命令。
你得到的消息是“你让我做了concat.min.js,但是没有比它更新的文件concat.js,所以......没有什么可做的”。
看看你提出的其他问题,我怀疑你想要的是:
concatenated.min.js: $(JS_TARGETS)
java -jar ~/bin/compiler.jar $(addprefix --js=,$^) >$@
确保concatenated.min.js
比JS_TARGETS
中列出的每个文件都新。