【问题标题】:How do I specify the path to any class in the makefile of a project?如何在项目的 makefile 中指定任何类的路径?
【发布时间】: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 中得到很好的支持
  • 包含顶级包的路径,不是单个类文件。
  • 我知道这根本不是最好的方法,但不幸的是这是我教授的要求。

标签: java makefile


【解决方案1】:

一些小的修复来推动项目向前发展。

  • 修正编译规则 - JFLAGS 周围需要空格
  • 使用构建规则的输入文件 - 以便包含完整路径名
  • 添加 vpath 以告诉编译器源文件的位置
.java.class:
        $(JC) $(JFLAGS) $^

CLASSPATH = .:./src/project

vpath %.java src/project

从你想要放置对象的问题中不清楚。考虑添加 -d 以指定目标文件夹,并设置添加 cp -d ... 以指定运行目标的位置。您将需要修复运行时间以添加空格。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-31
    • 2013-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多