繁体   English   中英

Makefile同时编译C和Java程序

[英]Makefile to compile both C and Java programs at the same time

我有三个需要同时编译的程序,2个用C编写,1个用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)

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

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

有关更多说明,请参阅我的Makefile教程 也就是说,您可能需要考虑更现代的构建系统,如BazelGradle 这些系统的设计使用起来更简单,更不容易出错,更便于携带(因为它们可以更方便地进行操作),而且速度更快。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM