0

在我的项目中,我需要一个库。为了使它可用,我必须提取一个 jar 文件。我想准备 Makefile 来自动化这个过程。我以为我做对了,但不管 java 文件中的变化如何,make 什么都不做(如果 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

但这也无济于事。

4

1 回答 1

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 相信它是最新的。)

于 2013-02-22T16:45:16.343 回答