我一直在努力让这件事情发挥作用。基本上我需要创建一个makefile来从源代码构建我的项目。我对Linux知之甚少但并不多,我是一个完整的makefile新手。
我已经尝试了来自网络的大量示例,并且都抱怨他们缺少依赖项。其他人建议使用Ant或Mavern,但这不可能是精确的手部通知:
引自规范
您的提交应包含一个 单个文件comp2010.tar适合 在Linux系统上使用。这必须 包含一个文件Makefile,以及所有 源。你不应该交任何 .class文件。你的Makefile必须构建 来自Java源代码的工具。该 主要类必须叫Blaise。在 简而言之,(自动)测试过程 将包括:
tar xf comp2010.tar
make
java Blaise < test.file > testout 2> testerr
这些命令将在一个执行 标准中的空目录 部门教学Linux Java 1.6环境。该 CLASSPATH将包含ANTLR jar, 版本3.2。
注意:请确保您的 提交可以编译和 在标准部门执行 机器。请确认你 使用正确版本的Java,和 你不使用绝对路径。如果 你使用任何外部库 也需要提交这些。
所以你看到我无法设置任何环境变量,因为运行它的机器不是我的,我不允许管理访问。我无法提交任何类文件,因此makefile不适合我,而Ant / Mavern脚本将无法工作,因为测试过程是自动化的并使用此makefile,我允许提交的所有文件都是.java文件。所以我需要构建一个makefile,没有办法解决这个问题。
源结构如下:
SRC \包1 *的.java
SRC \包2 *的.java
自动生成\程序包A *的.java
要编译的东西需要所有3个文件夹中的源文件。 Main()方法位于src \ Package1 \ 1.java
中这些目录中的每一个都是Eclipse中的一个包,这三个包依赖于彼此以及外部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
这失败了,例如“org.antlr.runtime不存在”,这是在antlr-3.2.jar中。我在我的智慧结束,很快就需要交出来。我假设我只是简单地导入了jar,也许我需要使用CLASSPATH。我很抱歉,如果这是一个简单的问题,但我现在已经尝试了6个小时制作其中一个。你能给予的任何帮助都会非常感激。
亲切的问候 Feldoh
答案 0 :(得分:4)
我可以在这里看到一些问题:
您尝试为哪个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) $<
答案 1 :(得分:3)
如果使用不包含当前目录的类路径,请确保指明源路径。
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
CLASSPATH = antlr-3.2.jar
SOURCEPATH = .
Default: $(CLASS_FILES)
%.class: %.java
$(JAVAC) -classpath $(CLASSPATH) -sourcepath $(SOURCEPATH) $<
clean: $(RM) *.class
替代方法是使用包含当前目录的类路径(因为在没有提供源路径时使用类路径):
CLASSPATH = .:antlr-3.2.jar
%.class: %.java
$(JAVAC) -classpath $(CLASSPATH) $<
(其余如上)
当然,您也可以将选项添加到JAVAC
变量中。
答案 2 :(得分:0)