使文件Java“缺少运算符”“与默认值无关”

时间:2015-08-27 14:42:36

标签: java cmake makefile

我正在尝试为我的程序构建一个make文件,并且我在第4行(javac $(JFLAGS))获得了错误运算符。我也收到错误“与默认无关”。有人可以帮我解决这个错误吗?我被困了很久了。非常感谢

JFLAGS = -g -d
JC = javac
%.class : %.java
    javac $(JFLAGS)

CLASSES = \
    Hello.java

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

clean:
    $(RM) *.class

1 个答案:

答案 0 :(得分:0)

你提到你收到了错误

  

make:'默认'没什么可做的。

这是错误。 make告诉您目标default是最新的,并且其先决条件都不比它更旧或需要重新制作。对于您的特定情况,当文件Hello.class已存在于与您的makefile相同的相同目录中时,就会发生这种情况。它是错误,而是来自make的简单消息。

关于您的其他错误

  

Java:第4行缺少运算符

可能这可能是

  

makefile:4:***缺少分隔符。停止。

代替?如果是这种情况,则意味着您没有正确缩进行

javac $(JFLAGS)
带有制表符的

注意:我之所以提到这一点,是因为它似乎是您所描述的可以复制的最接近的错误消息。

另一个比上述更紧迫的问题尤其是您使用javac $(JFLAGS)JFLAGS。在JFLAGS中,您已指定-d选项。当您执行javac $(JFLAGS)时,您获得的错误应与

类似
$ javac -g -d
javac: -d requires an argument

这是因为传递给-d时的javac选项用于告诉javac应该放置.class文件的输出目录。如果想要您的.class文件与makefile相对于其包名称输出在同一目录中(请参见下文),则需要删除-d }选项并将JFLAGS声明为

JFLAGS = -g

但是,如果您希望将.class文件输出到与makefile相同的目录中,则需要在-d之后声明目录} JFLAGS中的选项为

JFLAGS = -g -d /path/to/my/output/directory

现在我们已经介绍了-d选项,让我们继续实际编译.java文件。您目前的规则是

%.class : %.java
    javac $(JFLAGS)

这应该改为

%.class : %.java
    $(JC) $(JFLAGS) $<

自动变量$<代表第一个先决条件,并将创建一个像

这样的命令
$ javac -g Hello.java

为您的特定示例,它将在与Hello.class和您的makefile文件相同的目录中创建Hello.java文件。