使用javac进行Makefile编译问题

时间:2010-05-09 18:36:16

标签: java makefile compilation

我的makefile有问题。我有三节课。他们做的很简单。一个在减法上做了一个加法,最后一个将实例化这两个并简单地打印出结果的加法和减法。

现在当我创建我的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

4 个答案:

答案 0 :(得分:3)

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

javac -g Plus.java

更好的选择可能是:

javac -g *.java

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

Eclipse:http://www.eclipse.org
Netbeans:http://www.netbeans.org

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

Ant:http://ant.apache.org/
Maven: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]替换为实际制表符 - 您可能知道这在制作中非常重要!

答案 1 :(得分:0)

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

答案 2 :(得分:0)

试试这个。唉,管理Java类依赖是一个痛苦的使用make(在相对较大的项目中已经完成),所以你仍然应该认真考虑使用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

答案 3 :(得分:0)

我解决了。这是包的问题。我在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