gpt4 book ai didi

为类创建文件夹的 Java makefile

转载 作者:行者123 更新时间:2023-12-02 05:57:01 24 4
gpt4 key购买 nike

我尝试创建一个 java makefile,将 java 源代码编译为特定文件夹中的类,但没有成功。到目前为止,我设法获取了这些类,但我确实很难理解如何创建文件夹并将类放入其中。

这是我到目前为止的代码:

JC = javac
JVM = java
.SUFFIXES: .java .class
.java.class:
$(JC) *.java

default: .java.class

clean:
$(RM) *.class

我看了很多教程,还是没明白。基本上我的文件夹中有 .java 文件。当我运行 make 时,我希望这些类进入 /bin 文件夹,如果它不存在,则会创建它

最佳答案

您无法使用后缀规则做您想做的事情。您必须使用 pattern rules如果您希望将输出放置在与源不同的目录中。模式规则是 GNU make 的一项功能,所以希望您正在使用它(您没有说)。

另外,您使用后缀规则的方式不正确:您没有将后缀规则本身声明为先决条件。您将要构建的实际文件声明为先决条件。

此外,make 本身无法做到这一点:您必须告诉编译器将输出放在哪里。我不是 Java 人,所以我无法帮助你。检查您的手册。

您的配方通过一次调用构建所有 .java 文件,这实际上并不是 make 的工作方式:make 想要将单个源文件(加上可能的其他头文件等)转换为单个输出文件。

替换您的后缀规则:

.SUFFIXES: .java .class
.java.class:
$(JC) *.java

使用模式规则:

$(OUT)/%.class : %.java
mkdir -p $(@D)
$(JC) -o $@ $<

(我不知道 -o 是否适合 javac:正如我所说,您必须查阅 Java 手册)。使用模式规则时,无需声明 .SUFFIXES

然后,声明您的默认目标以取决于您想要生成的输出文件:

classfiles := $(wildcard *.class)

default: $(classfiles:%.class=$(OUT)/%.java)

关于为类创建文件夹的 Java makefile,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56003387/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com