0

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

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

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

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

  4. 我应该把makefile放在哪里?在 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”。我想我在这里遗漏了一些大图,所以如果有人可以向我解释,我将不胜感激。谢谢

4

2 回答 2

8

make不是构建 Java 的正确工具。您应该使用AntMaven或其他 Java 构建工具。可以使用. _make

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

说了这么多:

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

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

%.class : %.java
        $(JC) $(JFLAGS) $<
于 2013-04-02T05:15:58.800 回答