2014-12-02 77 views
0

我正在學習如何編寫makefile並遇到問題。 我有一個用於java應用程序的makefile,但每次執行目標jar時,即使自上次調用以來沒有任何更改,整個代碼也會重新編譯。我經常讀到,如果目標的依賴關係(例如'jar')發生了變化,但是這裏不是這種情況,那麼只有重新編譯纔是有利的。什麼可以解決問題?用於java的makefile,僅在文件更改時重新編譯

FOLDER=some/path 

jar: A.class B.class 
    jar cf output.jar $(FOLDER)/bin/a/A.class $(FOLDER)/bin/b/B.class 

A.class: 
    javac $(FOLDER)/a/A.java -d $(FOLDER)/bin -implicit:none 

B.class: 
    javac $(FOLDER)/b/B.java -d $(FOLDER)/bin -implicit:none-implicit:none 
+2

哎呀,使用一個構建系統,該系統是*爲Java設計*! (Gradle,Maven,甚至是Ant)。 – 2014-12-02 22:41:45

+0

output.jar做了什麼,我希望它不寫給A.java。 – 2014-12-02 22:44:44

回答

1

使用顯式路徑到您的類文件,也不要忘了規則中的先決條件(類依賴於Java源上):

FOLDER=some/path 

jar: $(FOLDER)/bin/a/A.class $(FOLDER)/bin/b/B.class 
    jar cf output.jar $(FOLDER)/bin/a/A.class $(FOLDER)/bin/b/B.class 

$(FOLDER)/bin/a/A.class: $(FOLDER)/a/A.java 
    javac $(FOLDER)/a/A.java -d $(FOLDER)/bin -implicit:none 

$(FOLDER)/bin/b/B.class: $(FOLDER)/b/B.java 
    javac $(FOLDER)/b/B.java -d $(FOLDER)/bin -implicit:none-implicit:none 
+0

目標$(FOLDER)/bin/a/A.java的命令是什麼? – phitreaj 2014-12-02 23:01:41

+0

* .java文件不需要制定目標/目標,那些我們的來源不是嗎?我們需要照顧的是,當這些來源改變他們的核心應用類文件時,應該重新編譯。身份證建議使用make/makefiles搜索一下,尋找術語目標,目標,配方。 – 2014-12-02 23:10:38

+0

你的答案解決了這個問題,謝謝 – phitreaj 2014-12-02 23:28:57

相關問題