我在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感谢您的详细解答,现在一切都清晰有效!
答案 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*
相依