关于java makefile的基础知识

时间:2013-04-02 04:56:08

标签: java eclipse compilation makefile

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

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

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

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

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

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

  6. 生成文件:

    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”。我想我在这里错过了一些大图,所以如果有人能向我解释,我真的很感激。感谢

2 个答案:

答案 0 :(得分:7)

make不是构建Java的正确工具。您应该使用AntMaven或其他Java构建工具。用make来完成工作是可能的,但除了最简单的Java程序之外,你最终会得到一个删除所有内容的makefile,并且每次都从头开始重新编译。 / p>

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

所有这一切:

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

答案 1 :(得分:1)

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

%.class : %.java
        $(JC) $(JFLAGS) $<