2010-05-17 3 views
3

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

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

ответ

3

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

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

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

+0

Удаление линии «CC» решило проблему ... хотя у меня также были файлы «kasiski.c» и «kasiski.h» (из предыдущей попытки C проекта), которая вызвала много шума и ошибок от make (я все еще не могу понять, почему). Удалив эти исходные файлы, он скомпилировал все без заминки. Благодаря! –

+0

@ Michael: https://sites.google.com/site/michaelsafyan/coding/resources/how-to-guides/how-to-write-a-makefile страница не найдена Предоставить новую ссылку –

+0

Извините, он перешел на https://sites.google.com/site/michaelsafyan/software-engineering/how-to-write-a-makefile некоторое время назад, и я не понимал, что все еще существуют такие мертвые ссылки. Обновлено. –

Смежные вопросы