Hello! Please tell me how to implement a project build from several folders. in src, the sources (.c), and in inc, the sources (.h). I would like to implement the build via makefile and linux machine. If not difficult, please give an example makefile. Thank!

    1 answer 1

    in the main directory (where the src include folders are located) such a Makefile

    all: #ctags -R --c++-kinds=+p --fields=+iaS --extra=+q . cd src ; make all clean: cd src ; make clean install: cd src ; make install 

    the commented line is for vim so that he can collect the tag file.

    and this file is in the src directory:

     ### # EDITABLE SECTION start ### ########## #MODE=DEBUG MODE=RELEASE ########################################## # определим define, который определит текущую дату. полезно BUILDDATE := $(shell date +%d%m%Y) # выбираем разные настройки в зависимости от типа сборки - релиз/дебаг ifeq ($(MODE),DEBUG) OPTFLAGS=-g3 -ggdb DEFINES=-DDEBUG -DBUILDDATE=\"$(BUILDDATE)\" else OPTFLAGS=-O1 -ggdb -DNDEBUG DEFINES=-DBUILDDATE=\"$(BUILDDATE)\" endif # а здесь то, что будет включено во все типы сборок # Define always DEFINES+=-D_REENTRANT -D_PTHREADS -D__USE_GNU # вот здесь ключевой момент - включается каталог include. Все инклуды в сорцах должны включаться оносительно каталога include INCLUDES= -I../include -I/usr/local/mylib LIBPATH = -L/usr/local/mylyb # параметры линковщика. проверьте LINK=сс -m32 -Wl,-L/usr/lib32,-melf_i386 # компилятор CFLAGS = $(OPTFLAGS) -Wall -pedantic $(INCLUDES) $(DEFINES) -m32 -pipe СС=gсс # а это каталог, где будет бинарник BINDIR=../bin ### # EDITABLE SECTION end ### # здесь нужно вставить полный список всех c/cpp файлов SRC= list_of_your_c_files # это такой трюк, что бы получить имена .о файлов. OBJS=$(subst .c,.o,$(SRC)) all: $(OBJS) main_task main_task: $(LINK) $(LIBPATH) $(LIBS) -o $(BINDIR)/binary_name $(OBJS) # это правило преобразования c -> .o $(OBJS): %.o: %.c $(СС) $(CFLAGS) -c $< clean: rm -f *.o rm -f *.so rm -f *~ rm -f ../include/*~ 

    I rewrote it from my positive project, so I could be mistaken in the compiler or linker options.

    PS and do not forget about the indentation in the file, make is very picky.