【问题标题】:Basics on java makefilejava makefile的基础知识
【发布时间】:2013-03-23 07:00:43
【问题描述】:

我是 java 和 makefile 的新手,我想要一些关于 makefile 的介绍性信息。通常在网上找到的信息大多是示例和高级别的。以下是我对 makefile 的一些具体/幼稚问题:

  1. 什么类型的文件是生成文件的目标? .class 和 .java?

  2. makefile 对这些项目文件有什么作用?我在 Eclipse 中完成了我的项目,因此 .class 文件存储在 bin 中,而 .java 文件存储在 scr 中。 makefile 在这些文件之间建立了什么样的连接?

  3. 生成文件的结果是什么? makefile 的目的是告诉编译器如何生成一个可执行文件,所以结果是在当前目录中生成一个新的可执行文件,是吗?

  4. 我应该将生成文件放在哪里?在 bin 文件夹中? scr 文件夹?将所有苍蝇混合在一个目录下并将其放在那里?

  5. 最后,我为我的项目制作了一个小的 makefile,它应该编译 3 个类。它不起作用,我不知道为什么:

制作文件:

JFLAGS = -g
JC = javac
.SUFFIXES: .java .class
.java.class:
    $(JC) $(JFLAGS) $*.java

CLASSES = \
    DNA.java \
    C.java \
    fastmatch.java 

default: classes

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

clean:
    $(RM) *.class

我做错了吗?我只是将所有内容放在一个文件夹下,然后在命令行中输入“make”。我想我在这里遗漏了一些大图,所以如果有人可以向我解释,我将不胜感激。谢谢

【问题讨论】:

  • 大局是在 Java 领域我们不使用“make”。尝试在谷歌上搜索“ant”或“maven”或“gradle”或“sbt”。

标签: java eclipse compilation makefile


【解决方案1】:

我很难记住我的品牌,但我认为你需要:

%.class : %.java
        $(JC) $(JFLAGS) $<
【解决方案2】:

make 不是构建 Java 的正确工具。您应该使用AntMaven 或其他Java 构建工具。 有可能使用make 完成工作,但是对于除了最琐碎的 Java 程序之外的任何东西,您最终都会得到一个 makefile,它会删除所有内容并每次都从头开始重新编译。

Make 在 C 和朋友的土地上运行良好。在那里,源文件依赖于它导入的所有头文件,而头文件不依赖任何东西(因为它们没有被编译),所以你的依赖树不会太深。在 Java 中,每个类都依赖于它导入的每个类,而这些类又依赖于更多的类,因此通常情况下,如果不编译项目中的所有其他类,就无法编译单个类。您可以在您的 makefile 中描述这一点,但要在不到一秒的时间内完成 Ant 所做的工作将是数小时的繁琐工作。

说了这么多:

  1. “目标”是 makefile 生成的东西。如果您编写的代码不是编写代码的代码,那么 .java 文件不是目标
  2. 在您发布的 makefile 中,.class 文件将与对应的 .java 文件位于同一位置
  3. makefile 的结果基本上可以是任何东西。 make 本身就是一种相当强大的语言。 this makefile 的结果是三个已编译的 Java 类(可能更多,因为 javac 可能会找到更多要编译的类,或者您的某些类可能有内部类。同样,这就是为什么 make 是一个糟糕的 Java 工具)
  4. makefile 通常位于项目根目录中。通常,复杂的项目会有其他的子目录生成文件

【讨论】:

  • 所以我应该将 makefile 放在 src 和 bin 文件夹之外?我的导师特别想要一个 Makefile(这意味着没有 Ant)。我的 makefile 会完成这项工作吗?而且,我应该使用哪个命令来运行它?谢谢!
  • @user1926344 你的导师真的希望你在 Java 中使用 makefile 吗?我担心你得到的教学质量。 :-/ 除了使用 makefile 之外,分配是否有任何规则? IMO,这里最好的 makefile 将是一个明确编译所有内容而不尝试使用花哨的 make 规则的文件。
  • whops 刚刚意识到他说对于 java 文件,我们应该编写一个脚本来编译所有内容。所以我对所有的 .java 文件都做了 javac,这似乎有效。感谢您为我阐明概念!
  • @user1926344 太好了!一个调用 javac 的简单 shell 脚本是处理几个文件的小型学校项目的好方法。
猜你喜欢
  • 1970-01-01
  • 2011-06-01
  • 2014-06-19
  • 1970-01-01
  • 2010-12-25
  • 1970-01-01
  • 2020-07-19
  • 1970-01-01
  • 2014-04-16
相关资源
最近更新 更多