Criando Makefile com bibliotecas

Como posso criar um Makefile simples usando o comando abaixo?

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 

Eu referenciei este link, mas estou ficando confuso.

Talvez algo como

  # 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) 

Sinta-se livre para se adaptar. (Você provavelmente tem arquivos de header e precisa adicionar dependencies de arquivos de objects para arquivos de origem e de header). Talvez use o pkg-config se ele souber sobre opencv . Substitua os muitos espaços iniciais nas regras por uma guia. Leia com atenção o GNU make documentation .

Se você tiver sourc2.cpp e tiver dois arquivos de header header1.hh e header2.hh que são #include -d por sourc2.cpp será necessário adicionar a regra de dependência:

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

e há um caminho (ao passar argumentos como -M ou -MD para o gcc através de regras adequadas) para obter tais dependencies geradas automaticamente, veja esta questão .

Você pode querer usar o remake para depurar seu Makefile -s (por exemplo, como remake -x ). Execute make -p para entender quais regras são conhecidas por make