Хотелось бы попытаться установить очень маленькую систему Make-файлов. У меня есть следующая настройка, но что-то не совсем правильно (это было связано с чтением нескольких сообщений SO по этой теме, хотя и с некоторыми конкретными проектами, и на некоторых веб-сайтах. Я не должен улавливать что-то фундаментальное в том, . Makefile»вызов суб-Makefiles(GNU) Make: Как настроить базовую систему?
Это даже проще, чем иметь основные файлы Makefile вызовов в разных подкаталогах Вот следующие файлы я заготовил:.
Makefile:
all: $(MAKE) -f ./make_system.mk $(MAKE) -f ./make_crc.mk
make_system.mk :
G = -g ## debug option CC = gcc ## compiler SRCS = source.c sink.c gateway.c EXES = source sink gateway OBJS = source.o sink.o gateway.o CFLG = LFLG = LIB = #-lsocket -lnsl -lpthreadall: $(EXES)
%.o: %.c %.h $(CC) -c $G $(CFLG) $<
source: source.o $(CC) -o source source.o $(LIB) $(LFLG)
sink: sink.o $(CC) -o sink sink.o $(LIB) $(LFLG)
gateway: gateway.o $(CC) -o gateway gateway.o $(LIB) $(LFLG)
clean: /bin/rm -f core *.o $(EXES) *~
make_crc.mk:
CC = gcc CFLAGS = -g LFLAGS = HDR = crcmode.h SRC = crcmodel.c crctest.c OBJ = crcmodel.o crctest.o EXE = crctestall: $(EXE)
%.o: %.c %.h $(CC) -c $(CLFAGS) $<
$(EXE): $(OBJ) $(CC) $(LFLAGS) $(OBJ) -o $(EXE)
clean: /bin/rm -f *.o *~ core $(EXE)
Как настроить Makefile, чтобы вызвать меньшие суб-мейкфайлы (типа * .mk)? Это основной, но важный первый шаг к работе с более крупными системами makefile (есть руководство для консультаций, хотя я не думаю, что он содержит явные базовые примеры). Если кто-то, кто это сделал, может показать мне небольшую виньетку Makefile, это было бы очень полезно (опять же, эта система makefile может существовать в одном и том же локальном каталоге).
Примечание: Индивидуальные make-файлы make_system и make_crc работают нормально, когда они сами называются «Makefile», но я хочу попытаться назвать их отдельными подфайлами с одним общим Makefile.
ADDENDUM (в следующем примере): После того, как я реализовал решение Carl, показанное ниже, я понял, что вам нужно всегда включать какую-либо форму «make clean» или хотя бы ввести в командной строке перед вызовом Makefile. В противном случае вы увидите соответствующий вывод «ничего не нужно делать». Это было то, что я знал раньше, но пренебрег этим делать это время (просто проверить: просто посмотрите на свой каталог, и вы увидите, что у вас есть исполняемые файлы в каталоге environment /).
В чем проблема, с которой вы сталкиваетесь? Это выглядит хорошо для меня. –
Когда вы говорите: «Индивидуальные make-файлы ... отлично работают, когда они сами называются« Makefile », но«, вы имеете в виду, что они не работают при вызове «make -f make_system.mk» и «make -f make_crc .mk "? –
Я обновил свой пост выше, чтобы вы могли видеть результат, который я получаю. Кажется, он не работает, когда я набираю метку «все», хотя и находится в обоих подфайлах. Я решил переименовать каждый файл подкачки из «Makefile» (так как каждый из них был первоначально вызван) до «some_descriptive_name.mk», а затем заглавил новый основной make-файл «Makefile». И я делал «очистить» перед выполнением этой новой системы make. – 9codeMan9