我正试图为一个java项目编写一个makefile,如下所示。我连接了一个数据库(当我使用另一个IDE而不是javac编译时,安装并测试了它的工作情况)。我不知道如何将驱动程序写入makefile。对于下面的makefile,在键入make之后,我得到消息:包com.mysql.jdbc不存在。但我的makefile所在的文件夹中有mysql-connector-java-5.116-bin.jar。
JFLAGS = -g
JC = javac
.SUFFIXES: .java .class
.java.class:
$(JC) $(JFLAGS) $*.java
JavaLibraries =
mysql-connector-java-5.1.16-bin.jar
CLASSES =
DBMain.java
Update.java
server.java
Client.java
default: classes
classes: $(CLASSES:.java=.class)
clean:
$(RM) *.class
感谢您的意见。
我再怎么强调也不为过,Java和make不能很好地结合在一起。使用make构建Java项目可能会遇到严重的问题。
然而,如果您真的想使用make,尽管有所有警告,那么您必须调整Java编译器的类路径设置:
JFLAGS = -g
JC = javac
CLASSPATH=mysql-connector-java-5.1.16-bin.jar:.
.SUFFIXES: .java .class
.java.class:
$(JC) $(JFLAGS) -cp $(CLASSPATH) $*.java
...
因此,CLASSPATH
由所有使用的JAR和*.java文件的包根目录(我认为这是当前目录)组成,在Unix/Linux系统上用冒号分隔,在Windows上用分号分隔。然后在.java.class
规则中,您必须使用-cp
标志调用Java编译器来传递类路径。
这个数据库模式定义语言项目包含一个示例build.xml
,它展示了如何通过JDBC初始化和测试数据库。请注意,ant
目标与make命令完全一样。
附录:
我需要写一个
makefile
供其他人使用。
另一个答案显示了直接从makefile
调用javac
的一个很好的例子。它展示了如何包含classpath
,这可能会解决您眼前的问题;但是对于更复杂的构建(比如那些包含包的构建)来说,这种方法很快就变得笨拙起来。这可以通过使用subst
功能来缓解:
PKG = com.name.util
PKG_PATH = $(subst .,/,$(PKG))
一个简单得多的方案是写一个最小的ant
目标,比如<target name="compile"…>
,如这里所示;则相应的CCD_ 13命令很简单:
.SUFFIXES: .java .class
.java .class:
ant compile
当然,makefile
现在依赖于ant
,但ant
相当普遍。