在我的项目中,我需要一个库。为了使它可用,我必须提取一个jar文件。我想准备Makefile来自动化这个过程。我认为我做对了,但毕竟make无论java文件中的变化都没有(如果CMDControl.class存在,否则它每次都会提取jar文件)。
all : CMDControl.class
%.class : %.java
javac $<
CMDControl.class : org/gjt/mm/mysql/Driver.class
jar xf ../mysql-connector-java-5.1.22-bin.jar
clean :
-rm *.class
jar文件包含以下目录:com META-INF org
Makefile有什么问题?
我试过
all : CMDControl
CMDControl : CMDControl.class
但这也没有帮助。
答案 0 :(得分:0)
问题在于,由于jar文件不是任何内容的先决条件,因此Make不关心它是否已被修改。
这应该可以解决问题:
%.class : %.java
javac $<
CMDControl.class : org/gjt/mm/mysql/Driver.class
org/gjt/mm/mysql/Driver.class: ../mysql-connector-java-5.1.22-bin.jar
jar xf $<
touch $@
(最后一个命令会更新org/gjt/mm/mysql/Driver.class
的修改时间,以便Make认为它是最新的。)