Makefile для компиляции программ на C и Java одновременно - PullRequest
3 голосов
/ 17 мая 2010

У меня есть три программы, которые должны быть скомпилированы одновременно, 2 написаны на C и 1 на Java. У меня все три работало с Makefile, когда они были в C, но потом переписал один из них в Java ... Есть ли способ скомпилировать все 3 одновременно с одним и тем же make-файлом?

Вот мой текущий 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 Ответ

3 голосов
/ 17 мая 2010

Да, вы можете собрать их все сразу. Если ваша цель «все» зависит от всех трех приложений, тогда «make all» должен собрать их все. Вы можете добавить «-j3» для фактической компиляции с использованием трех отдельных потоков и / или процессов (неясно, что вы подразумеваете под «сразу»). Также пара критических замечаний здесь:

  • Не указывайте "CC", "CFLAGS" или "LDFLAGS". Вы никогда не должны определять «CC», поскольку он автоматически определяется для вас компилятором C по умолчанию в системе, и вы должны просто добавлять «CFLAGS» и «LDFLAGS» по мере необходимости (используя + =) вместо того, чтобы их загромождать, а просто присвоение им делает ваш Makefile негибким (потому что он не может быть переопределен или дополнен внешне).
  • Использование CLASSES для ссылки на файлы ".java" вводит в заблуждение до чертиков ... вам, вероятно, следует переименовать переменную в JAVA_SRCS и определить JAVA_CLASSES = $ {JAVA_SRCS: .java = .class}.

Дополнительную информацию см. В моем руководстве по Makefile . Тем не менее, вы можете рассмотреть более современную систему сборки, такую ​​как Bazel или Gradle . Эти системы разработаны так, чтобы их было намного проще в использовании, меньше подверженных ошибкам, более переносимыми (поскольку они облегчают выполнение задач), и быстрее.

...