Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java makefile未正确编译_Java_Makefile_Javac - Fatal编程技术网

Java makefile未正确编译

Java makefile未正确编译,java,makefile,javac,Java,Makefile,Javac,下面是makefile代码 Spell_Checker.class: Dictionary.class Spell_Checker.java javac Spell_Checker.java Dictionary.class: Dictionary.java javac Dictionary.java 下面是我在终端内部键入make时生成文件的错误日志 javac Dictionary.java Picked up _JAVA_OPTIONS: -Xmx32m javac S

下面是makefile代码

Spell_Checker.class: Dictionary.class Spell_Checker.java
    javac Spell_Checker.java

Dictionary.class: Dictionary.java
    javac Dictionary.java
下面是我在终端内部键入make时生成文件的错误日志

javac Dictionary.java
Picked up _JAVA_OPTIONS: -Xmx32m
javac Spell_Checker.java
Picked up _JAVA_OPTIONS: -Xmx32m
Spell_Checker.java:26: error: cannot find symbol
        Dictionary spell_check_this = new Dictionary(DICT_FILE);
        ^
symbol:   class Dictionary
location: class Spell_Checker
Spell_Checker.java:26: error: cannot find symbol
        Dictionary spell_check_this = new Dictionary(DICT_FILE);
                                          ^
symbol:   class Dictionary
location: class Spell_Checker 2 errors
makefile:2: recipe for target 'Spell_Checker.class' failed
make: *** [Spell_Checker.class] Error 1

我是makefile新手,我有一个名为Spell_Checker.java的java文件,它调用Dictionary.java来检查文件是否拼写正确。我很难弄清楚如何正确地编写makefile。谢谢

您需要指定一个
类路径来与编译器一起搜索。通常的方法是为
Makefile
中的内容分配变量。我还将始终提供“所有”和“干净”目标。那可能看起来像

JAVAC = javac
CLASSPATH = -cp .

all: Dictionary.class Spell_Checker.class

clean:
        rm -f *.class

Dictionary.class: Dictionary.java
        $(JAVAC) $(CLASSPATH) Dictionary.java

Spell_Checker.class: Dictionary.class Spell_Checker.java
        $(JAVAC) $(CLASSPATH) Spell_Checker.java

看起来您的类在一个包中,但您的源文件不在相应的目录中。比如说你有:

 package mypackage;
然后,您的源文件应位于目录
mypackage
中,并且您的makefile应为:

mypackage/Dictionary.class: mypackage/Dictionary.java
    javac $?

诸如此类。

这里不赞成可能重复发布代码和错误的图像,因为这使我们更难帮助您解决问题。最好是直接将相关代码和/或错误复制粘贴到问题中。请阅读,然后回答相应的问题。我建议先使用IDE,然后再使用为Java设计的构建工具,如maven或gradle,这样您就不需要编写这样的规则。不幸的是,我不允许使用IDE来完成这项工作。我编辑了这个问题,添加了复制的代码和错误。我认为应该是
javac-cp。Spell_Checker.java
,以便它能够找到另一个类。似乎这个问题很可能与
make
无关:如果您在没有
make
的情况下进行复制(即:使用shell中的
javac
),可能会更容易找到帮助,因为我不认为很多人会将make与java一起使用