有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Makefile可以同时编译C和Java程序

我有三个程序需要同时编译,两个用C编写,一个用java编写。我让三个人在使用C语言时都使用Makefile,但后来用java重写了其中一个。。。有没有办法用同一个makefile一次编译所有3个

这是我当前的Makefile:

CC=gcc 
JC=javac 
JFLAGS= -g
CFLAGS= -Wall -g -std=c99
LDFLAGS= -lm
.SUFFIXES: .java .class
.java.class:
 $(JC) $(JFLAGS) $*.java

CLASSES = kasiski.java kentry.java

ALL= ic ftable kasiski

all: $(ALL)

ic: ic.o

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

ftable: ftable.o

ic.o: ic.c ic.h

ftable.o: ftable.c ftable.h

.PHONY: clean

clean:
 rm -rf core* *.class *.o *.gch $(ALL)

共 (1) 个答案

  1. # 1 楼答案

    是的,你可以一次编译它们。如果“全部”目标依赖于所有三个应用程序,那么“全部生成”应该构建所有应用程序。您可以加入“-j3”来实际使用三个独立的线程和/或进程进行编译(不清楚“立即”是什么意思)。此外,这里还有一些批评:

    • 不要定义“CC”、“CFLAGS”或“LDFLAGS”。您永远不应该定义“CC”,因为它是自动为您定义到系统上的默认C编译器的,您应该根据需要(使用+=)仅附加到“CFLAGS”和“LDFLAGS”而不是将它们删除,因为简单地分配给它们会使您的Makefile不灵活(因为它们不能在外部被重写或扩充)
    • 使用类来引用“.java”文件非常令人困惑。。。您可能应该将变量重命名为JAVA_SRCS,并定义JAVA_CLASSES=${JAVA_SRCS:.JAVA=.class}

    欲知更多解释,请参阅我的Makefile tutorial。也就是说,您可能需要考虑一个更现代的构建系统,如BazelGradle。这些系统被设计成使用更简单、更不容易出错、更可移植(因为它们使事情更容易移植)和更快