# This is a general-purpose makefile for building C and C++ code that links to # opencv libraries. # # Most configuration variables are set with ?= to allow environment variables # to override them. # # Basic usage: # # make cvdemo # ./cvdemo ARGS # # to compile cvdemo.c to the executable cvdemo and then run it, where ARGS are # the command line arguments (if any) that you want to pass to cvdemo. Default # config will also compile and link with cvbase.c or cvbase.cpp. EMPTY := SPACE := $(EMPTY) $(EMPTY) # list of extra source dependencies of executables CV_DEPS_C ?= cvbase.c CV_DEPS_CXX ?= cvbase.cpp CV_VER ?= 2.3.1 ifneq ($(patsubst MINGW%,MINGW,$(shell uname)),MINGW) CV_PKG_GEN ?= opencv CV_PKG_VER ?= $(CV_PKG_GEN)-$(CV_VER) CV_PKG ?= $(shell if pkg-config --exists $(CV_PKG_VER); \ then echo $(CV_PKG_VER); \ else echo $(CV_PKG_GEN); fi) # https://code.ros.org/trac/opencv/ticket/1475 CV_LIBS ?= $(patsubst -l%.so.$(CV_VER),%.so.$(CV_VER), \ $(shell pkg-config --libs $(CV_PKG))) CV_FLAGS ?= $(shell pkg-config --cflags $(CV_PKG)) else CV_DRIVE ?= c CV_ARCH ?= x86 CV_PKG ?= opencv ifneq ($(CC),cl) CV_DIR ?= $(CV_DRIVE):/$(CV_PKG) CV_INC ?= $(CV_DIR)/build/include CV_LIB ?= $(CV_DIR)/build/$(CV_ARCH)/mingw/bin CV_FLAGS ?= -I$(CV_INC)/opencv -I$(CV_INC) CV_LIBS ?= -shared-libgcc $(wildcard $(CV_LIB)/*.dll) else CV_DIR ?= $(CV_DRIVE):\$(CV_PKG) CV_INC ?= $(CV_DIR)\build\include CV_LIB ?= $(CV_DIR)\build\$(CV_ARCH)\vc10\lib CV_FLAGS ?= //I$(CV_INC)\opencv //I$(CV_INC) CV_LIBS ?= //MD //link //LIBPATH:$(CV_LIB) $(notdir $(wildcard $(CV_LIB)/*.lib)) OUT_FLAG = //Fe endif endif CFLAGS += $(CV_FLAGS) CXXFLAGS += $(CV_FLAGS) OUT_FLAG ?= -o$(SPACE) show-settings: @echo CV_DEPS_C=$(CV_DEPS_C) @echo CV_DEPS_CXX=$(CV_DEPS_CXX) @echo CV_PKG=$(CV_PKG) @echo CV_LIBS=$(CV_LIBS) @echo CV_FLAGS=$(CV_FLAGS) %.o: %.c $(CC) -c $(CPPFLAGS) $(CFLAGS) $< %.o: %.cpp $(CXX) -c $(CPPFLAGS) $(CXXFLAGS) $< %.o: %.cc $(CXX) -c $(CPPFLAGS) $(CXXFLAGS) $< %: %.c $(CV_DEPS_C) $(CC) $(CPPFLAGS) $(CFLAGS) $(OUT_FLAG)$@ $^ $(CV_LIBS) %: %.cpp $(CV_DEPS_CXX) $(CXX) $(CPPFLAGS) $(CXXFLAGS) $(OUT_FLAG)$@ $^ $(CV_LIBS) %: %.cc $(CV_DEPS_CXX) $(CXX) $(CPPFLAGS) $(CXXFLAGS) $(OUT_FLAG)$@ $^ $(CV_LIBS) clean: $(RM) *.o *.obj