【问题标题】:Makefile to compile both C and Java programs at the same timeMakefile 同时编译 C 和 Java 程序
【发布时间】:2011-02-20 06:16:59
【问题描述】:

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

【问题讨论】:

    标签: java c makefile compilation


    【解决方案1】:

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

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

    更多解释请看我的Makefile tutorial。也就是说,您可能需要考虑更现代的构建系统,例如 BazelGradle。这些系统被设计为更易于使用、更不容易出错、更便携(因为它们使做事更容易便携)并且速度更快。

    【讨论】:

    猜你喜欢
    • 2011-08-22
    • 2012-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-15
    • 2011-08-14
    相关资源
    最近更新 更多