2012-01-15 61 views
0

我很困惑。我已經看到了一些類似的問題,但沒有一個解決我的問題。所以,我有這個劇本我抓起在線,通過這樣的makefile運行自動壓縮JavaScript文件:Makefile無法爲xxx完成

concatenated.min.js: file1.js file2.js 
    java -jar ~/bin/compiler.jar $(addprefix --js=,$^) >[email protected] 

我這裏有

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=$< >[email protected] 

這個make文件在同一目錄a.js,B。 js,c.js和d.js我有一個文件concat.min.js。然後,我運行make concat.min.js,makefile給了我'concat.min.js沒有任何工作要做'。

我也認爲這個問題是因爲我錯過了%.min.js規則中的$(addprefix --js=,$^) >[email protected]。但它似乎仍然給我同樣的錯誤,即使我將它添加到規則中。我做錯了什麼/錯字?謝謝。

+0

您確定*您在調用'make'的目錄中有一個名爲'a.js'的文件? Make明確表示你不知道。 – derobert 2012-01-15 09:43:26

+0

是的,最後的作品。但我真正的目標是將它們連接在一起,這仍然不起作用。 – 2012-01-15 10:05:55

+0

「無事可做」表示目標比其依賴關係更新,因此它不需要重新制作。如果你想無條件地重新創建它,那麼把它變成一個假冒;如果您有Make不知道的其他依賴項,請在Makefile中聲明它們。 – tripleee 2012-01-15 10:36:11

回答

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=,$^) >[email protected] 

這可以確保concatenated.min.js比每個JS_TARGETS列出的文件的更新。

1

如果您沒有concat.js文件,就會發生這種情況。