【问题标题】:How do I create a Makefile that will compile and run java code with command line arguments?如何创建一个使用命令行参数编译和运行 java 代码的 Makefile?
【发布时间】:2013-02-14 02:21:32
【问题描述】:

我需要能够编译我的程序,然后每次使用不同的 .txt 文件作为第一个命令行参数执行 3 次,而这一切都需要使用单个“make”命令来完成。我希望我的 Makefile 执行的相应终端命令如下:

javac MainDriver.java FSA.java State.java Transition.java
java MainDriver test1.txt
java MainDriver test2.txt
java MainDriver test3.txt

这是我目前拥有的:

JC = javac
JCR = java

.SUFFIXES: .java .class
.java.class:
    $(JC) $*.java

CLASSES = \
    MainDriver.java \
    FSA.java \
    State.java \
    Transition.java 

default: classes

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

clean:
    $(RM) *.class *~

【问题讨论】:

  • 你会考虑用 Apache Ant 代替 make 吗?

标签: java compilation makefile executable


【解决方案1】:
JC = javac
JCR = java

.SUFFIXES: .java .class
.java.class:
    $(JC) $*.java

CLASSES = \
    MainDriver.java \
    FSA.java \
    State.java \
    Transition.java 

TXT_FILES = \
    test1.txt \
    test2.txt \
    test3.txt \

default: classes exec-tests

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

clean:
    $(RM) *.class *~

exec-tests: classes
    set -e; \
    for file in $(TXT_FILES); do $(JCR) MainDriver $$file; done;


.PHONY: default clean classes exec-tests

【讨论】:

  • 我尝试使用它,每次测试都出现以下错误:Exception in thread "main" java.lang.NoClassDefFoundError: test1/txt Caused by: java.lang.ClassNotFoundException: test1.txt at java.net.URLClassLoader$1.run(URLClassLoader.java:202) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:190) at java.lang.ClassLoader.loadClass(ClassLoader.java:306) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
  • 哎呀错过了实际的二进制文件。已更新答案。我还假设您想要运行所有包含所有文本文件的二进制文件。对吗?
  • 还添加了一个 set -e,以便它在第一个错误时停止。如果您不希望出现这种行为,请删除该行。
  • 效果很好,谢谢!您是否碰巧知道为什么它最后会导致该异常?只是好奇。
  • 你的意思是 Makefile 的第一个版本?那是因为它在 for 循环中缺少程序名称。
猜你喜欢
  • 1970-01-01
  • 2017-10-14
  • 2013-11-29
  • 1970-01-01
  • 2013-09-25
  • 1970-01-01
  • 2014-11-07
  • 1970-01-01
相关资源
最近更新 更多