带有 Jar 和包依赖项的 Makefile

fel*_*doh 5 java dependencies makefile javac package

我一整天都在努力让这件事发挥作用。基本上我需要创建一个 makefile 来从其源代码构建我的项目。我对 Linux 有一点了解,但了解不多,而且我是一个完整的 makefile 新手。

我已经尝试了来自网络各地的大量示例,但都抱怨它们缺少依赖项。其他人建议使用 Ant 或 Mavern,但这不可能,准确的交接通知是:

引自规范

您提交的内容应包含一个适合在 Linux 系统上使用的 comp2010.tar 文件。这必须包含一个 Makefile 文件和所有源代码。您不应提交任何 .class 文件。您的 Makefile 必须从 Java 源代码构建该工具。主类必须称为 Blaise。简而言之,(自动)测试过程将包括:

tar xf comp2010.tar

make

java Blaise < test.file > testout 2> testerr

这些命令将在使用 Java 1.6 的标准部门教学 Linux 环境中的空目录中执行。CLASSPATH 将包含 ANTLR jar,版本 3.2。

注意:请确保您提交的内容可以在标准部门机器上编译和执行。请确保您使用正确的 Java 版本,并且不使用绝对路径。如果您使用任何外部库,则还需要提交这些库。

所以你看,我无法设置任何环境变量,因为运行它的机器不是我的,而且我不被允许管理访问。我无法提交任何类文件,因此 makefile 不适合我,Ant / Mavern 脚本将无法工作,因为测试过程是自动化的并使用此 makefile,而我只允许提交 .java 文件。所以我需要构建一个 makefile,这是没有办法解决的。

源码结构如下:

src\Package1*.java

src\Package2*.java

自动生成\PackageA*.java

编译所需的所有 3 个文件夹中都有源文件。Main()方法位于src\Package1\1.java中

这些目录中的每一个都是 Eclipse 中的一个包,这 3 个包相互依赖以及一个外部 Jar 文件 antlr-3.2.jar


那么我该如何制作这个makefile。这是我的问题,我在下面提供了我自己的尝试:


JAVAC = javac
CLASS_FILES = src/package1/1.class auto-generated/packageA/2.class auto-generated/packageA/3.class auto-generated/packageA/4.class src/Package2/5.class src/Package2/6.class src/Package2/7.class src/Package2/8.class src/Package2/9.class src/Package2/10.class src/Package2/11.class src/Package2/12.class antlr-3.2.jar.*

Default: $(CLASS_FILES)

%.class: %.java
    $(JAVAC) $<

clean: $(RM) *.class
Run Code Online (Sandbox Code Playgroud)

此操作失败,并出现诸如“org.antlr.runtime 不存在”之类的错误,该错误位于antlr-3.2.jar 内。我束手无策,需要尽快交出。我假设我只是错误地导入了 jar,也许我需要使用 CLASSPATH 是什么。如果这是一个简单的问题,我很抱歉,但我已经尝试了 6 个小时来解决其中一个问题。如果您能提供任何帮助,我们将不胜感激。

亲切的问候 费尔多

rsp*_*rsp 4

我在这里可以看到一些问题:

  • 如上所述,您需要在 tar 文件根目录的默认包中设置 Blaise 类
  • 您使用的任何包也应该直接存在于根目录下,而不是存在于源子目录中(因为 Java/Javac 将无法在那里找到它们)
  • make 是特定于使用空格和制表符的 wrt
  • 您的 makefile 不使用 javac 命令的选项
  • 您要为哪个版本的 make 构建 makefile?我知道的版本将采用如下格式:

    JAVAC = javac
    JAVACFLAGS =
    SRC= Blaise.java \
        package1/1.java \
        packageA/2.java
    CLS= $(SRC:.java=.class)
    
    all:  $(CLS)
    
    
    .SUFFIXES : .class .java
    .java.class :
        $(JAVAC) $(JAVACFLAGS) $<
    
    Run Code Online (Sandbox Code Playgroud)