【问题标题】:Makefile compilation issue with javacjavac的Makefile编译问题
【发布时间】:2010-05-09 18:36:16
【问题描述】:

我的生成文件有问题。我有三个班。他们做非常简单的事情。一个对减法进行加法,最后一个将实例化两者并简单地打印结果加法和减法。

现在,当我创建我的 makefile 时,我编译了我的 Plus.java 和我的 Minus.java 但不知道如何编译主类,因为它依赖于前两个。如果可能的话,我想从 makefile 编译并运行它。

当我尝试运行 make 时得到上述结果:

javac -g Plus.class Minus.class
javac: invalid flag: Plus.class
Usage: javac <options> <source files>
use -help for a list of possible options
make: *** [Operation.class] Error 2

我不知道该怎么做;如果我的问题很简单,请原谅我,但我是新来的这些东西。我搜索了很多网站,但没有答案。

这是我的 Makefile:

JCC = javac

JCR = java

JFLAGS = -g

default: Operation.class

Plus.class: Plus.java
    $(JCC) $(JFLAGS) Plus.java

Minus.class: Minus.java
    $(JCC) $(JFLAGS) Minus.java

Operation.class: Operation.class
    $(JCC) $(JFLAGS) Operation.class  

run: Operation.class
    $(JCR) Operation.class

clean:
    $(RM) *.class

【问题讨论】:

  • 不要为 java 使用 makefile。使用 ant 或 maven。
  • 我想使用 makefile,因为我还必须使用 java 和 c++ 文件。
  • 我知道makefile,但不知道java。我看不出这个makefile是如何工作的,或者它是如何产生这个错误的。你是简单地运行make,还是给它一个目标,比如make Pluss.class

标签: java makefile compilation


【解决方案1】:

您需要将源文件的名称传递给 javac:

javac -g Plus.java

更好的选择可能是:

javac -g *.java

Java 世界中很少有人直接调用 javac 或使用 makefile。大多数人在开发时使用 IDE:

Eclipse:http://www.eclipse.org
网豆:http://www.netbeans.org

然后是用于最终/自动构建的更全面的构建工具:

蚂蚁:http://ant.apache.org/
马文:http://maven.apache.org/

这两者都可以从 make 调用,或者确实调用 make 本身,以便与您现有的构建系统集成。

编辑: 看来你有一个makefile问题。看看这是否有效:

JCC = javac
JCR = java
JFLAGS = -g

all:
[TAB]$(JCC) $(JFLAGS) *.java

run:
[TAB]$(JCR) Operation

clean:
[TAB]$(RM) *.class

将 [TAB] 替换为实际的制表符 - 您可能知道这在 make 中非常重要!

【讨论】:

  • 就是这样。我目前正在做一个项目,我确实需要这些东西,而不是 IDE。
  • 谢谢,但是标签在那里。它只是没有出现在帖子中
  • +1 表示ant,尽管以这种方式使用make 可能具有指导意义。
【解决方案2】:

你需要运行 javac -g Plus.java Minus.java (不是 .class)

【讨论】:

  • 我想我不明白。我向您展示我的makefile,也许我可以通过这种方式找到: JCC = javac JCR = java JFLAGS = -g 默认值:Operation.class Plus.class: Plus.java $(JCC) $(JFLAGS) Plus.java Minus.class : Minus.java $(JCC) $(JFLAGS) Minus.java Operation.class: Operation.class $(JCC) $(JFLAGS) Operation.class run: Operation.class $(JCR) Operation.class clean: $(RM ) *.class
【解决方案3】:

试试这个。唉,使用 make 管理 Java 类依赖项是一件很痛苦的事情(在相对较大的项目中已经这样做了),因此您仍然应该认真考虑使用 Ant 或其他一些合适的工具。

JCC = javac

JCR = java

JFLAGS = -g

default: Operation.class

Plus.class: Plus.java
            $(JCC) $(JFLAGS) Plus.java

Minus.class: Minus.java
             $(JCC) $(JFLAGS) Minus.java

Operation.class: Operation.java Plus.class Minus.class
                $(JCC) $(JFLAGS) Operation.java 

run: Operation.class
    $(JCR) Operation.class

clean: $(RM) *.class

【讨论】:

    【解决方案4】:

    我解决了。这是包裹的问题。我在 netbeans 中编辑了我的文件并保持:

    打包操作

    给每一个人

    所以我得到了操作来编译,但现在它没有运行

    愚蠢的问题....

    JCC = javac
    
    JCR = java
    
    JFLAGS = -g
    
    default: Operation.class Plus.class Minus.class
    
    Plus.class: Plus.java
        $(JCC) $(JFLAGS) Plus.java
    
    Minus.class: Minus.java
        $(JCC) $(JFLAGS) Minus.java
    
    Operation.class: Operation.java Plus.java Minus.java
        $(JCC) $(JFLAGS) Operation.java  Plus.java Minus.java
    
    run:
        $(JCR) Operation
    
    clean:
        $(RM) *.class
    

    【讨论】:

    • 尝试使用101 按钮将Makefile 格式化为代码。
    猜你喜欢
    • 1970-01-01
    • 2013-01-08
    • 1970-01-01
    • 2017-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-03
    相关资源
    最近更新 更多