makefile for java,仅在文件更改时重新编译

时间:2014-12-02 22:39:04

标签: java makefile

我正在学习如何编写makefile并遇到问题。 我有一个java应用程序的makefile,但每次执行目标jar时,整个代码都会重新编译,即使自上次调用后没有任何更改。我经常阅读,如果目标的依赖关系(例如'jar')发生了变化,那么仅重新编译是make的一个优点,但在这里并非如此。什么可以解决问题?

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

1 个答案:

答案 0 :(得分: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