我正在尝试为我的程序构建一个make文件,并且我在第4行(javac $(JFLAGS))获得了错误运算符。我也收到错误“与默认无关”。有人可以帮我解决这个错误吗?我被困了很久了。非常感谢
JFLAGS = -g -d
JC = javac
%.class : %.java
javac $(JFLAGS)
CLASSES = \
Hello.java
default: $(CLASSES:.java=.class)
clean:
$(RM) *.class
答案 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
文件。