java - Makefile 同时编译 C 和 Java 程序

标签 java c makefile compilation

我有3个程序需要同时编译,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)

最佳答案

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

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

更多解释请看我的Makefile tutorial .也就是说,您可能需要考虑一个更现代的构建系统,例如 BazelGradle .这些系统旨在更易于使用、更不容易出错、更便携(因为它们可以更轻松地以便携方式做事)和更快。

关于java - Makefile 同时编译 C 和 Java 程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2846708/

相关文章:

c++ - 调整 Makefile 以包含 SDL2

java - 服务器启动后将Ehcache的缓存数据写入本地文件(磁盘),重新启动时应从文件(磁盘)中获取数据

c - 内存位置和范围

C - header 相互包含

c pthread_create 字符串参数

java - 制作 Java 生成文件

没有 .cc 文件的 .o 文件的 C++ 编译

java - 使用 ImageJ API 从字节数组转换为 DICOM

java - 为什么会出现这种情况下拆箱的情况呢?

java - Actionscript 中的自定义 boolean 包装器