我是java和makefile的新手,我想了解一些关于makefile的介绍性信息。通常在网上找到的信息大多是示例和高级别的。以下是我对makefile的一些具体/天真的问题:
什么类型的文件是makefile的目标? .class和.java?
makefile对这些项目文件有什么作用?我在Eclipse中完成了我的项目,因此.class文件存储在bin中,.java文件存储在scr中。 makefile在这些文件之间建立了什么样的连接?
makefile的结果是什么? makefile的目的是告诉编译器如何生成可执行文件,因此结果是当前目录中的新可执行文件,是吗?
我应该在哪里放置makefile?在bin文件夹中? scr文件夹?将所有苍蝇混合在一个目录下并放在那里?
最后,我为我的项目制作了一个小的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”。我想我在这里错过了一些大图,所以如果有人能向我解释,我真的很感激。感谢
答案 0 :(得分:7)
make
不是构建Java的正确工具。您应该使用Ant或Maven或其他Java构建工具。用make
来完成工作是可能的,但除了最简单的Java程序之外,你最终会得到一个删除所有内容的makefile,并且每次都从头开始重新编译。 / p>
在C和朋友的土地上做得很好。在那里,源文件依赖于它导入的所有头文件,并且头文件不依赖于任何内容(因为它们不会被编译),因此您的依赖关系树不会过分深入。在Java中,每个类都依赖于它导入的每个类,这依赖于更多的类,因此通常情况下,如果不编译项目中的每个其他类,就无法编译单个类。你可以在你的makefile中描述它,但是在不到一秒钟的时间内完成Ant的工作将需要数小时的繁琐工作。
所有这一切:
.java
文件不是目标.class
文件将与相应的.java
文件位于同一位置make
本身就是一种相当强大的语言。 this makefile的结果是三个已编译的Java类(可能更多,因为javac
可能会找到更多要编译的类,或者某些类可能有内部类。再次,这就是为什么{{ 1}}是一个糟糕的Java工具)答案 1 :(得分:1)
我很难记住我的作品,但我认为你需要:
%.class : %.java
$(JC) $(JFLAGS) $<