我正在学习如何编写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
答案 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