gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:03:55 24 4
gpt4 key购买 nike

我有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/

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