使用makefile

时间:2019-10-10 23:14:01

标签: java bash makefile javac

我的目录当前看起来像这样

├── Makefile
├── run_tests (Unix executable)
└── src
    └── vehicles
        ├── Wheels.java
        └── Cars.java
    └── RunProgram.java
    tests
    └── test1.txt
    └── test2.txt

RunProgram.java是我的主要工具。

在线查看,我目前有一个看起来像这样的Makefile:

JFLAGS = -g
JC = javac
.SUFFIXES: .java .class
.java.class:
    $(JC) $(JFLAGS) $*.java

 CLASSES = \
    src/vehicles/Wheels.java \
    src/vehicles/Cars.java \
    src/RunProgram.java 

default: classes

classes: $(CLASSES:.java=.class)

clean:
    $(RM) *.class

我现在有两个主要问题。

1。。即使Cars.java首先编译Wheels,它也会向Wheels抛出“错误:找不到符号”(以前我的命令是错误的,现在是正确的)。

2。。我最终需要向Makefile中添加一个“测试”,这有其自身的问题。本质上,run_tests将通过System.in将所有内容放入tests文件夹中。但是,在其他目录中运行时遇到麻烦,因此我必须将RunProgram.class输出到根目录。

当打包结构中的唯一程序是RunProgram.java时,这就是我如何从命令行进行测试的原因

javac -d ./ ./src/RunProgram.java 
./run_tests "java RunProgram"

但是,当我现在尝试运行javac时,出现错误,指出包导入不存在。这就是为什么我要使用Makefile的原因,因为这是理想的解决方案。

TL; DR ,我需要一种使用Makefile编译程序并编写可以正确调用run_tests的“ make test”命令的方法

我也愿意接受一个解决方案,该解决方案允许我从命令行运行javac并从那里运行测试,但首选Makefile

1 个答案:

答案 0 :(得分:0)

我能解决的最好办法是制作一个jar文件,然后执行./run_tests "java -jar RunProgram.jar"显然不理想,但它确实有效。