Создание Makefile с библиотеками

Как я могу создать простой Makefile с помощью команды ниже?

 g++ -Wall -I/usr/include/opencv -I/usr/include/opencv2 -L/usr/lib/ -g -o exe sourc1.cpp sourc2.cpp sourc3.cpp -lopencv_core -lopencv_imgproc -lopencv_highgui -lopencv_ml -lopencv_video -lopencv_features2d -lopencv_calib3d -lopencv_objdetect -lopencv_contrib -lopencv_legacy -lv4l1 -lv4l2 -lv4lconvert -pthread  

Я ссылался на эту ссылку, но я запутался.

1 ответ

Решение

Может быть что-то вроде

 # your Makefile

 #### variables
 RM= rm -vf
 CXX= g++
 CXXFLAGS= -Wall -g
 CPPFLAGS= -I/usr/include/opencv -I/usr/include/opencv2 
 LDLIBS= -lopencv_core -lopencv_imgproc -lopencv_highgui \
         -lopencv_ml -lopencv_video -lopencv_features2d \
         -lopencv_calib3d -lopencv_objdetect -lopencv_contrib \
         -lopencv_legacy -lv4l1 -lv4l2 -lv4lconvert 
 SOURCEFILES= sourc1.cpp sourc2.cpp sourc3.cpp 
 OBJECTFILES= $(patsubst %.cpp,%.o,$(SOURCEFILES))
 PROGNAME= yourexe

 ### rules
 .PHONY: all clean

 all: $(PROGNAME)
 $(PROGNAME): $(OBJECTFILES)
       $(LINK.cpp) $^ $(LOADLIBES) $(LDLIBS) -o $@

 clean:
       $(RM) $(OBJECTFILES) $(PROGNAME) 

Не стесняйтесь адаптироваться. (Возможно, у вас есть заголовочные файлы, и вам нужно добавить зависимости объектных файлов в исходные и в заголовочные файлы). Возможно, используйте pkg-config, если он знает об opencv. Замените начальные много пробелов в правилах на вкладку. Внимательно прочитайте документацию GNU make.

Если у вас есть sourc2.cpp и если у вас есть два заголовочных файла header1.hh а также header2.hh которые #includeпо sourc2.cpp вам нужно добавить правило зависимости:

 sourc2.o: source2.cpp header1.hh header2.hh

и есть способ (передавая аргументы, такие как -M или -MD в gcc через подходящие правила), чтобы автоматически генерировать такие зависимости, смотрите этот вопрос.

Вы можете использовать римейк для отладки вашего Makefile-s (например, как remake -x). Бежать make -p понять, какие правила известныmake

Другие вопросы по тегам