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

Makefile make:如果尚未提取jar,则提取它,makefile,Makefile,在我的项目中,我需要一个图书馆。为了使它可用,我必须提取一个jar文件。我想准备Makefile来自动化这个过程。我认为我做对了,但不管java文件中的更改如何,make都不会做任何事情(如果存在CMDControl.class,否则每次都会提取jar文件) 但是这也没有帮助。问题是,由于jar文件不是任何东西的先决条件,Make不关心它是否被修改过 这应该可以做到: %.class : %.java javac $< CMDControl.class : org/gjt/mm/

在我的项目中,我需要一个图书馆。为了使它可用,我必须提取一个jar文件。我想准备Makefile来自动化这个过程。我认为我做对了,但不管java文件中的更改如何,make都不会做任何事情(如果存在CMDControl.class,否则每次都会提取jar文件)


但是这也没有帮助。

问题是,由于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 $@
%.类:%.java
爪哇语$<
CMDControl.class:org/gjt/mm/mysql/Driver.class
org/gjt/mm/mysql/Driver.class:../mysql-connector-java-5.1.22-bin.jar
jar xf$<
触碰$@

(最后一个命令更新了org/gjt/mm/mysql/Driver.class的修改时间,这样Make会认为它是最新的。)

我对jar不是很熟悉。你怎么用手做这个?如果您有一个jar文件和几个其他文件,您如何确定jar文件是否已经解包——而不是解包?@Beta:jar文件只是一个归档文件。当它是extract时,我应该在Makefile所在的目录中看到目录com、META-INF、org。我试图将这个“预期解包”jar中的文件设置为先决条件,但失败了。jar每次都会解包。驾驶日期:9月6日。如何更改Makefile,以便只有它的存在决定解包?@lord.didger:啊,我假设
jar
会更新解压文件的修改日期。很容易修复……事实上,我本可以自己解决,但我没有:)
all : CMDControl
CMDControl : CMDControl.class
%.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 $@