gpt4 book ai didi

java - 为什么下面的 makefile 不起作用?

转载 作者:太空宇宙 更新时间:2023-11-04 07:44:11 25 4
gpt4 key购买 nike

在下面的 makefile 中,目标“compile”每次都会执行,无论其依赖项是否更改。然而,对于目标“doc”来说,情况并非如此,尽管依赖关系是相同的。请帮忙!

all : setup compile doc

setup :
@mkdir -p doc bin

compile: ./src/*.java ./src/cs296BookAnalysis/*.java
@echo -n Compiling...
@javac -d ./bin ./src/cs296BookAnalysis/*.java ./src/BookAnalysisG01.java
@echo Done!

doc: ./src/*.java ./src/cs296BookAnalysis/*.java
@echo Generating Documentation using Javadoc...
@javadoc -d ./doc ./src/BookAnalysisG01.java -sourcepath ./src cs296BookAnalysis
@echo Done!

clean: rm -rf doc bin

最佳答案

这是因为 makefile 就是这样工作的:-)。

makefile 由规则组成:以非缩进行开头的每个 block 都是一个规则。每条规则都告诉 make 如何创建某个文件。

通常,“:”左边的部分是生成的文件的名称(目标)。例如,对于 C 程序,您可以编写:

main.o : main.c defs.h
cc -c main.c

这告诉make:

  • 这是如何创建 main.o 的规则
  • main.o 依赖于 main.cdefs.h
  • 运行cc ...来创建main.o

因此,make 每当时都会运行 cc... 部分

  • main.o 不存在
  • main.cdefs.hmain.o 更新

现在,在您的示例中,规则的目标不是创建的文件。此类目标称为“虚假目标”。由于 make 永远不会发现这些目标为文件,因此规则每次都会运行。

doc 规则是一个异常(exception):目录 doc 实际上存在,并且由于 javadoc 写入此目录,因此该目录的时间戳将会更新。 make 将看到 doc 比源文件新,并且不会运行该规则。

<小时/>

也就是说,我强烈建议您不要使用 Makefile 来编译 Java 代码。虽然这当然是可能的,但 Makefile 是为 C 代码设计的,缺乏许多对 Java 有用的功能。相反,使用 Java 构建工具。有几种可用;我可以推荐 Maven .

关于java - 为什么下面的 makefile 不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15592043/

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