Создание 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