make:如果尚未提取jar,则提取jar

时间:2013-02-22 13:16:33

标签: makefile

在我的项目中,我需要一个库。为了使它可用,我必须提取一个jar文件。我想准备Makefile来自动化这个过程。我认为我做对了,但毕竟make无论java文件中的变化都没有(如果CMDControl.class存在,否则它每次都会提取ja​​r文件)。

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

但这也没有帮助。

1 个答案:

答案 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认为它是最新的。)