【问题标题】:Java makefile not compiling correctlyJava makefile 未正确编译
【发布时间】:2018-07-22 01:06:48
【问题描述】:

这是生成文件的代码。

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 时遇到了麻烦。谢谢!

【问题讨论】:

  • 在这里发布代码和错误的图像是不受欢迎的,因为这会使我们更难帮助您解决问题。最好将相关代码和/或错误直接复制并粘贴到您的问题中。请阅读Why not to upload images of code on SO when asking a question?,然后阅读edit您的问题。
  • 我建议先使用 IDE,然后使用专为 Java 设计的构建工具,例如 maven 或 gradle,这样就不需要编写规则了。
  • 不幸的是,我不允许使用 IDE 来执行此操作。我编辑了问题以添加复制的代码和错误。
  • 我认为它应该是javac -cp . Spell_Checker.java,以便它能够找到其他类。似乎这个问题很可能与make 无关:如果您在没有make 的情况下进行复制(即:从shell 中使用javac),可能更容易找到帮助,因为我认为没有很多人使用用java制作

标签: java makefile javac


【解决方案1】:

您需要指定CLASSPATH 才能与您的编译器一起搜索。通常的方法是在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

【讨论】:

    【解决方案2】:

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

     package mypackage;
    

    那么你的源文件应该在目录mypackage,你的makefile应该是:

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

    等等。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-02-12
      • 1970-01-01
      • 2013-08-16
      • 1970-01-01
      • 2023-03-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多