做c++开发,要考虑到项目移植问题,很多时候依赖库多了,装的很烦心,为了实现不依赖于系统环境,将编译好的,lib与.h放至编译库,进行编译,下面以一个简单的例子进行说明。
本例子中,src下的cpp文件依赖于opencv2.4.10,glib0.4.0,gflags2.2。
具体的文件目录如下:
├── CMakeLists.txt
├── inc
│ ├── amcomdef.h
│ ├── arcsoft_face_sdk.h
│ ├── asvloffscreen.h
│ ├── include
│ │ ├── gflags
│ │ ├── glog
│ │ ├── opencv
│ │ └── opencv2
│ ├── liveless.h
│ └── merror.h
├── linux_so
│ ├── gflaglib
│ │ ├── libgflags_nothreads.so -> libgflags_nothreads.so.2.2
│ │ ├── libgflags_nothreads.so.2.2 -> libgflags_nothreads.so.2.2.2
│ │ ├── libgflags_nothreads.so.2.2.2
│ │ ├── libgflags.so -> libgflags.so.2.2
│ │ ├── libgflags.so.2.2 -> libgflags.so.2.2.2
│ │ └── libgflags.so.2.2.2
│ ├── gloglib
│ │ ├── libglog.a
│ │ ├── libglog.la
│ │ ├── libglog.so -> libglog.so.0.0.0
│ │ ├── libglog.so.0 -> libglog.so.0.0.0
│ │ ├── libglog.so.0.0.0
│ │ └── pkgconfig
│ ├── libarcsoft_face_engine.so
│ ├── libarcsoft_face.so
│ ├── libliveless.so
│ └── opencvlib
│ ├── libopencv_core.so -> libopencv_core.so.2.4
│ ├── libopencv_core.so.2.4 -> libopencv_core.so.2.4.10
│ ├── libopencv_core.so.2.4.10
│ ├── libopencv_highgui.so -> libopencv_highgui.so.2.4
│ ├── libopencv_highgui.so.2.4 -> libopencv_highgui.so.2.4.10
│ ├── libopencv_highgui.so.2.4.10
│ ├── libopencv_imgproc.so -> libopencv_imgproc.so.2.4
│ ├── libopencv_imgproc.so.2.4 -> libopencv_imgproc.so.2.4.10
│ └── libopencv_imgproc.so.2.4.10
└── src
└── liveless.cpp
从目录中可以看到,inc/include/下放了opencv2.4.10,glib0.4.0,gflags2.2的头文件,linux_so/gflaglib,linux_so/gloglib,linux_so/opencvlib分别存放这动态库(静态库)文件。
cmake 文件如下:
cmake_minimum_required(VERSION 2.8.7)
if(POLICY CMP0046)
cmake_policy(SET CMP0046 NEW)
endif()
if(POLICY CMP0054)
cmake_policy(SET CMP0054 NEW)
endif()
project(liveless)
add_compile_options(-std=c++11 -fpermissive)
include_directories(${PROJECT_SOURCE_DIR}/inc ${PROJECT_SOURCE_DIR}/inc/include)
link_directories(${PROJECT_SOURCE_DIR}/linux_so ${PROJECT_SOURCE_DIR}/linux_so/gloglib ${PROJECT_SOURCE_DIR}/linux_so/opencvlib ${PROJECT_SOURCE_DIR}/linux_so/gflaglib)
# add_definitions(${PROJECT_SOURCE_DIR}/)
aux_source_directory(${PROJECT_SOURCE_DIR}/src SRC_FILE)
#add_executable(${PROJECT_NAME} ${SRC_FILE})
add_library(${PROJECT_NAME} SHARED ${SRC_FILE})
target_link_libraries(${PROJECT_NAME} -larcsoft_face -larcsoft_face_engine -lopencv_core -lopencv_highgui -lopencv_imgproc -lglog -lgflags -lpthread)
INSTALL(TARGETS liveless
LIBRARY DESTINATION linux_so
ARCHIVE DESTINATION linux_so)