转自https://blog.csdn.net/weixin_41399111

CMakeLists写法总结

同学醒醒放学了 2018-07-21 21:21:06 4878 收藏 7
展开
个人最近学习了一些关于常见的CMakeLists的一些写法格式,分享给大家。

    CMAKE_MINIMUM_REQUIRED(VERSION xxx) 该项表示要求CMAKE的最低版本号.

    PROJECT(aim1) 此项表示所建立的工程名称 aim1;

    FIND_PACKAGE(xxx)该命令首先会在模块路径中寻找 Find<name>.cmake,这是查找库的一个典型方式。具体查找路径依次为CMake: 变量${CMAKE_MODULE_PATH}中的所有目录。如果没有查询到,随后会查看它自己的模块目录 /share/cmake-x.y/Modules/ ;

     如果没找到这样的文件,find_package()会在~/.cmake/packages/或/usr/local/share/中的各个包目录中查找,寻找<库名字的大写>Config.cmake 或者 <库名字的小写>-config.cmake (比如FIND_PACKAGE(Opencv REQUIRED),它会查找/usr/local/share/OpenCV中的OpenCVConfig.cmake或opencv-config.cmake)。个人认为这是CMake内置的快速查找方法

   SET( SRC_DIR_PATH src ),SET命令是用来设置变量,换句话说就是给变量赋值,例如本条命令表示SRC_DIR_PATH=src,注意这里的src代表Cmakelists的相对路径,即目录内的src文件夹,。SRC_DIR_PATH表示源文件目录路径。

    FILE(GLOB_RECURSE SOURCE_FILES "src/*.cpp"),FILE文件命令具体包括许多,在这里使用GLOB_RECURSE 代表把该目录(src下)的所有源文件都赋予变量SOURCE_FILES。

   INCLUDE_DIRECTORIES(xxx/include),INCLUDE就像源文件内的include一样,用来设置头文件。这里是用来设置头文件的搜索目录。告诉CMake,编译的时候去哪里找头文件。

   LINK_DIRECTORIES(xxx/lib),LINK就是链接的意思,lib是库,该命令就是要链接库,设置动态链接库的目录,例如链接caffe,可以表示为LINK_DIRECTORIES(/home/usr/caffe/build/lib)。既然已经设置好了链接库的目录,那么具体需要链接哪些库,需要通过下面的操作完成。

   SET( LIB_PROJECT caffe glog boost_system protobuf boost_thread gflags ),该命令是在设置链接库文件的名称。

   随后,需要在ADD_EXECUTABLE()命令后写出TARGET_LINK_LIBRARIES(aim1 ${LIB_PROJECT}),要链接的动态库, 参数指明库的名字即可,比如libcaffe.so,这里是需要加上lib前缀和.so后缀的,或者以变量的形式表示。而上条设置名称时,不需要这些前后缀。

   ADD_EXECUTABLE(TARGET ${PUBLIC_SRC_FILE} ${SRC_DIR_PATH}/detect_read_video_mixture.cpp ),生成可执行文件,需要将生成的名称和TARGET_LINK_LIBRARIES必须保持一致。

message( STATUS "hello world"),message命令就是向终端窗口发送消息,例如本条命令就是发送hello world。

CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
# 指定工程名称
PROJECT(abc)
set(CMAKE_CXX_FLAGS "-std=c++11")

# 导入OpenCV库
FIND_PACKAGE( OpenCV REQUIRED )

# 设置源文件
SET( SRC_DIR_PATH src )
FILE(GLOB_RECURSE SOURCE_FILES "src/*.cpp")

# 设置头文件搜索目录
SET( CAFFE_ROOT /home/kevin/SSD/caffe)
SET( CUDA_HOME /usr/local/cuda-8.0 )
INCLUDE_DIRECTORIES(${CAFFE_ROOT}/include/ ./include/ ${CAFFE_ROOT}/.build_release/src/ ${CUDA_HOME}/include/ )

# 设置动态库链接目录
LINK_DIRECTORIES( ${CAFFE_ROOT}/build/lib/ ${CUDA_HOME}/lib64/)

# 设置要链接的库文件
SET( LIB_PROJECT caffe glog boost_system protobuf boost_thread gflags)

# 指定执行文件输出目录
SET(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin)
# 生成可执行文件,即程序
ADD_EXECUTABLE( abc ${PUBLIC_SRC_FILE} ${SRC_DIR_PATH}/test.cpp )

# 要链接的动态库, 参数指明库的名字即可,比如libxxxx1.so, 指明是xxxx1即可!!!
TARGET_LINK_LIBRARIES( abc ${LIB_PROJECT} ${OpenCV_LIBS} )
 

猜你喜欢

转载自www.cnblogs.com/FutureSience/p/12817626.html