gpt4 book ai didi

javac makefile 在每个 'make' 上重新编译

转载 作者:行者123 更新时间:2023-11-30 04:35:06 25 4
gpt4 key购买 nike

知道为什么这个 makefile 会重新编译(不必要的)每个 .class 文件吗?另外,我认为这是相关的,java文件导入它们上面的文件。我已经尝试了 4 次,但浪费了很多时间来让它工作,而不是处理我项目的实际代码,因此我们将非常感谢任何帮助。

最近的尝试:

#########################################################################
# #
# http://ieng6.ucsd.edu/~cs131f/makenotes.html #
# #
#########################################################################
JFLAGS = -g -d
JC = javac
.SUFFIXES : .java .class
SRCDIR = simpella
OUTDIR = simpella/out

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

#########################################################################
#
# example run: javac -g -d simpella/out simpella/simpella.java
#
#########################################################################

CLASSES = \
$(SRCDIR)/Util.java \
$(SRCDIR)/Converters.java \
$(SRCDIR)/Connection.java \
$(SRCDIR)/Simpella.java

default: classes

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

#########################################################################
clean:
$(RM) -v simpella/out/simpella/*.class
@- echo "Cleaned"

尝试 3...:

#########################################################################
# #
# http://ieng6.ucsd.edu/~cs131f/makenotes.html #
# #
#########################################################################
JFLAGS = -g -d
JC = javac
.SUFFIXES : .java .class
SRCDIR = simpella
OUTDIR = simpella/out

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

#########################################################################
#
# example run: javac -g -d simpella/out simpella/simpella.java
#
#########################################################################

all: Simpella.java


Util.java:
Util.java=Util.java
Converters.java:
Converters.java=Converters.class
Connection.java: Converters.java Util.java
Connection.java=Connection.class
Simpella.java: Connection.java Converters.java Util.java
Simpella.java=Simpella.class
@- echo "Done Compiling!!"



#########################################################################
clean:
$(RM) -v simpella/out/simpella/*.class
@- echo "Cleaned"

尝试 2...:

#########################################################################
# #
# http://ieng6.ucsd.edu/~cs131f/makenotes.html #
# #
#########################################################################
JFLAGS = -g -d
JC = javac
.SUFFIXES : .java .class
SRCDIR = simpella
OUTDIR = simpella/out

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

#########################################################################

#CLASSES = Simpella.java Connection.java Converters.java Util.java

all: Simpella.java


#example run: javac -g -d simpella/out simpella/simpella.java

Util.java:
$(JC) $(JFLAGS) $(OUTDIR) $(SRCDIR)/Util.java
Converters.java:
$(JC) $(JFLAGS) $(OUTDIR) $(SRCDIR)/Converters.java
Connection.java:
$(JC) $(JFLAGS) $(OUTDIR) $(SRCDIR)/Connection.java
Simpella.java: Util.java Connection.java Converters.java
$(JC) $(JFLAGS) $(OUTDIR) $(SRCDIR)/Simpella.java
@- echo "Done Compiling!!"

#########################################################################
clean:
$(RM) -v simpella/out/simpella/*.class
@- echo "Cleaned"

尝试 1...:

JFLAGS = -g -d
JC = javac
.SUFFIXES: .java .class
.java.class:
$(JC) $(JFLAGS) $*.java

CLASSES = \
simpella\Util.java \
simpella\Converters.java \
simpella\Connection.java \
simpella\simpella.java


default: classes

classes: $(CLASSES:.java=.class)
@- echo "Done Compiling!!"

clean:
$(RM) *.class

最佳答案

为 java 创建定义良好的 makefile 是一项复杂的任务,因为 a) 源文件和类文件位于不同的目录中,b) 这些目录是嵌套的,以及 c) 源文件和类文件之间没有一对一的映射。然后,即使做得很好的 makefile 也不会获得良好的性能,因为 make 实用程序会生成单独的进程来编译每个 java 文件。另一方面,java编译器本身工作速度快,具有嵌入式依赖性检查,并且能够在单个进程运行中编译数百个java文件。因此,不使用 make 实用程序来编译 java 文件。对于中小型项目,使用java编译器并将所有源文件传递给它。对于大型项目,请使用 Ant、Gradle 或其他支持 Java 的构建工具。

编辑:要使用 javac 依赖性检查,请按以下方式运行:

  javac -d ${OUTDIR} -cp ${OUTDIR} -sourcepath ${SRCDIR} ${MAIN_JAVA_FILE_NAME}

也就是说,只传递主java文件的名称,指向其他源文件所在的位置,两次指向类文件所在的位置:存储在哪里以及检查是否存在。 ${SRCDIR} 应根据包结构包含 java 文件。

关于javac makefile 在每个 'make' 上重新编译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13696864/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com