opencv.pc // 这个配置被Makefile 调用
# Package Information for pkg-config
prefix=/usr/local/thirdparty
exec_prefix=${prefix}
libdir=${exec_prefix}/lib64
includedir_old=${prefix}/include/opencv
includedir_new=${prefix}/include
Name: OpenCV
Description: Open Source Computer Vision Library
Version: 3.4.0
Libs: -L${exec_prefix}/lib64 -lopencv_highgui -lopencv_videoio -lopencv_imgcodecs -lopencv_imgproc -lopencv_core
Libs.private: -ldl -lm -lpthread -lrt
Cflags: -I${includedir_old} -I${includedir_new}
Makefile
thirdparty_root := /usr/local/thirdparty
facesdk_root := /usr/local/facesdk
export PKG_CONFIG_PATH := ${thirdparty_root}/lib64/pkgconfig:${PKG_CONFIG_PATH}
CC := g++
INCS += `pkg-config --cflags opencv`
INCS += -I${facesdk_root}/include
INCS += -I${thirdparty_root}/include
INCS += -I${thirdparty_root}/include/apr-1
LIBS += `pkg-config --libs opencv`
LIBS += -L${thirdparty_root}/lib -lglog -lactivemq-cpp -lapr-1
LIBS += -L${facesdk_root}/lib -lrr_faceverify_t -lrr_facedetect_t
AFLAGS := -Wall -c -fPIC -O2 -std=c++11 $(INCS)
LDFLAGS := -lpthread -lcurl
LDFLAGS += -Wl,-rpath,${thirdparty_root}/lib64:${thirdparty_root}/lib:${facesdk_root}/lib
OBJS := $(patsubst %.cpp,%.o,$(shell find . -name "*.cpp"))
FaceFilter: $(OBJS)
$(CC) -o $@ $^ $(LDFLAGS) $(LIBS)
$(OBJS): %.o:%.cpp
$(CC) $(AFLAGS) $^ -o $@
debugOBJS:
@echo ${OBJS}
.PHONY: clean FaceFilter setenv
clean:
rm -rf *.o FaceFilter baseutils/*.o factory/*.o message/*.o servicemodules/*.o
参考新的写法///
######### 标准Makefile Lv1.2 / 使用动态库 ########
EXE=helloworld
SUBDIR=src object
#CXXFLAGS:编译选项, LDFLAGS:链接选项
CXXFLAGS += -I/home/mytest/example/include/
LDFLAGS += -L/home/mytest/example/lib -lexample
CXX_SOURCES =$(foreach dir,$(SUBDIR), $(wildcard $(dir)/*.cpp))
CXX_OBJECTS=$(patsubst %.cpp, %.o, $(CXX_SOURCES))
DEP_FILES =$(patsubst %.o, %.d, $(CXX_OBJECTS))
$(EXE): $(CXX_OBJECTS)
g++ $(CXX_OBJECTS) -o $(EXE) $(LDFLAGS)
%.o: %.cpp
g++ -c $(CXXFLAGS) -MMD $< -o $@
-include $(DEP_FILES)
clean:
rm -rf $(CXX_OBJECTS) $(DEP_FILES) $(EXE)
test:
echo $(CXX_OBJECTS)
下面是一个生成so 的一个makefile 的例子,非常通用,直接会找到当前文件下的所有cpp,以及文件夹下的所有cpp 文件
该例子用了opencv 库和人脸识别库,就是这么简单,拿走拿走别客气
EXE=libDetectCutImage.so
#SUBDIR=src object
#CXXFLAGS:编译选项, LDFLAGS:链接选项
CC := g++
INCS += `pkg-config --cflags opencv`
INCS += -I/usr/lib/jdk1.8.0_191/include
INCS += -I/usr/lib/jdk1.8.0_191/include/linux/
INCS += -I/usr/local/faceSDK_x86-64_ubuntu-16.04_cpu+cuda-gpu_3.1.2_180830/include
LIBS += `pkg-config --libs opencv`
LIBS += -L/usr/local/faceSDK_x86-64_ubuntu-16.04_cpu+cuda-gpu_3.1.2_180830/lib/cpu -lrr_facedetect_c
CXXFLAGS := -Wall -c -fPIC -O2 -std=c++11 $(INCS)
LDFLAGS := $(LIBS) -shared
#CXXFLAGS += -I/usr/local/include/
#LDFLAGS += -L/usr/local/lib -lopencv_world
#CXX_SOURCES =$(foreach dir,$(SUBDIR), $(wildcard $(dir)/*.cpp))
#CXX_OBJECTS=$(patsubst %.cpp, %.o, $(CXX_SOURCES))
CXX_OBJECTS := $(patsubst %.cpp,%.o,$(shell find . -name "*.cpp"))
DEP_FILES =$(patsubst %.o, %.d, $(CXX_OBJECTS))
$(EXE): $(CXX_OBJECTS)
g++ $(CXX_OBJECTS) -o $(EXE) $(LDFLAGS)
%.o: %.cpp
g++ -c $(CXXFLAGS) -MMD $< -o $@
-include $(DEP_FILES)
clean:
rm -rf $(CXX_OBJECTS) $(DEP_FILES) $(EXE)
test:
echo $(CXX_OBJECTS)