CMAKE编译动态库不依赖系统环境

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/mhsszm/article/details/89156553

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

猜你喜欢

转载自blog.csdn.net/mhsszm/article/details/89156553