用Java创建Makefile

时间:2015-08-24 08:12:17

标签: java build terminal makefile

我在Windows环境中构建一个java程序,但我需要能够在Linux环境中编译它。我目前遇到makefile问题:

项目文件夹以这种方式组织:

add_subdirectory

project_folder library.jar src folder1 a.java b.java folder2 c.java d.java folder3 e.java e.java文件几乎放在所有其他folder3文件中,因为它是主要的结构,对于每个文件我都有行

.java

当我使用另一个类文件中的结构时,Eclipse会自动生成。终端告诉我的是什么:

import folder3.e;

这是makefile

error: Package folder3 does not exist

这是我的第一个java文件,我认为我错误地包括了类之间的引用,我怎么能解决这个问题?

谢谢

更新:@Karthikeyan Vaithilingam感谢您的详细解答,现在一切都清晰有效!

1 个答案:

答案 0 :(得分:0)

-d .添加到JFLAGS,以便使用适当的文件夹结构创建类文件。

因此,您的JFLAGS应如下所示。

JFLAGS = -g -cp .:library.jar -sourcepath . -d .

-d是用于目标文件夹的标志,在上面的示例中是当前文件夹。您可以使用任何目的地,但不要忘记使用-cp将其添加到类路径中。通过使用-d,您可以保持源文件夹清洁,也可以轻松清理,只需删除目标文件夹。

<强>更新

问题是CLASSES部分中Java文件的顺序。由于folder3.e类在其他类中被引用,因此它必须在开头。它应该如下所示。

CLASSES = \
    src/folder3/e.java \
    src/folder1/a.java \
    src/folder1/b.java \
    src/folder2/c.java \
    src/folder2/d.java  

此外,您可以将库保存在单独的文件夹中,然后使用-cp libs\*添加文件夹中的所有jar。它很容易维护

所以文件夹结构将是

project_folder
   libs
      library.jar
   src
      folder1
         a.java
         b.java
      folder2
         c.java
         d.java
      folder3
         e.java

最终的Makefile将是

JFLAGS = -g -cp ".:libs/*"  -sourcepath . -d .
JC = javac


.SUFFIXES: .java .class

.java.class:
    $(JC) $(JFLAGS) $*.java

CLASSES = \
    src/folder3/e.java \
    src/folder1/a.java \
    src/folder1/b.java \
    src/folder2/c.java \
    src/folder2/d.java 

default: classes

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

clean:
    rm -r folder*

相依

为什么不使用构建工具GradleMavenAnt