【发布时间】:2019-11-17 16:57:46
【问题描述】:
我有一个 java 项目,不同的目录包含不同的类。我试图在上层目录中创建一个链接所有类并编译de项目的makefile。 所以要到达a类,它应该遵循路径./src/project/packageA/a.java,而要到达b类,应该遵循./src/project/packageB/b.java。我有以下生成文件:
JFLAGS = -g
JC = javac
JVM = javac
.SUFFIXES: .java .class
.java.class:
$(JC)$(JFLAGS)$*.java
CLASSPATH = .:./src/project
CLASSES = \
a.java \
b.java \
...
MAIN = Main
default: classes
classes: $(CLASSES:.java=.class)
run: $(MAIN).class
$(JVM)$(MAIN)
clean:
$(RM)*.class
其中 CLASSES 是一个包含项目中所有类的宏。我尝试为每个目录重新定义变量 PATH,分配 vpath 并直接在每个目录的类名中指定路径。但似乎没有一个工作,我总是收到错误消息“没有构建对象a.class的规则,需要'类'。”这是我第一次使用 makefile,我不知道如何继续。
谢谢大家。
【问题讨论】:
-
将 CLASSPATH 指定为包含顶级包的父文件夹的路径。
-
我已经做到了。我相信我现在应该在类名之前给出 -cp 选项,然后 make 将 -cp 标识为要构建的对象。没有宏 CLASSES 会更容易(但更长)工作吗?
-
无法帮助您进行制作,但还有其他更接近 java 的工具可用于了解 like、ant、maven 和 gradle,并在 IDE 中得到很好的支持
-
包含顶级包的路径,不是单个类文件。
-
我知道这根本不是最好的方法,但不幸的是这是我教授的要求。