C++编程--第1篇: CMakeLists.txt编写

CMakeLists.txt编写及应用

1. 初级应用

仅包含源代码文件,没有附加共享库文件和第三方库.

  • 内容
# 设置cmake最小支持版本,及工程名
cmake_minimum_required(VERSION 2.8)
project(工程名)
# 设置C++11标准
set(CMAKE_BUILD_TYPE "Release")
set(CMAKE_CXX_FLAGS "-std=c++11")
# 生成可执行文件
add_executable(可执行文件名 源代码.cpp)

2. 中级应用

包含源代码和附加共享库文件,不包含第三方库.

  • 内容
# 设置cmake最小支持版本,及工程名
cmake_minimum_required(VERSION 2.8)
project(工程名)
# 设置C++11标准
set(CMAKE_BUILD_TYPE "Release")
set(CMAKE_CXX_FLAGS "-std=c++11")

#一个工程下至少需要包含bin、lib、include、src、data  5个文件夹
#设定可执行二进制文件的目录
set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin)
#设定存放编译出来的库文件的目录
set(LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/lib)
#将该目录设为链接目录
link_directories(${PROJECT_SOURCE_DIR}/lib)
#设定头文件目录
include_directories(${PROJECT_SOURCE_DIR}/include)
#添加共享库,将${PROJECT_NAME}这个工程名作为共享库名
add_library(${PROJECT_NAME} SHARED src/库代码1.cpp  src/库代码2.cpp  src/库代码3.cpp)

#src文件夹下可以包含多个main函数
add_executable(可执行文件名 src/源代码.cpp)
#将可执行程序链接到 共享库名 ${PROJECT_NAME} 即可,因为共享库包含了所有的库文件
target_link_libraries(可执行文件名  ${PROJECT_NAME})

3. 高级应用

包含第三方库文件Eigen, OpenCV, Sophus, g2o, PCL,Ceres等.

  • 内容
# 设置cmake最小支持版本,及工程名
cmake_minimum_required(VERSION 2.8)
project(工程名)
# 设置C++11标准
set(CMAKE_BUILD_TYPE "Release")
set(CMAKE_CXX_FLAGS "-std=c++11")

#因为ceres与g2o不是常用库,要添加它的findg2o.cmake文件,即在cmake_modules文件夹下
list( APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake_modules )

#一个工程下至少需要包含bin、lib、include、src、data  5个文件夹
#设定可执行二进制文件的目录
set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin)
#设定存放编译出来的库文件的目录
set(LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/lib)
#将该目录设为链接目录
link_directories(${PROJECT_SOURCE_DIR}/lib)
#设定头文件目录
include_directories(${PROJECT_SOURCE_DIR}/include)

#添加opencv库
find_package(OpenCV REQUIRED)
include_directories(${OpenCV_INCLUDE_DIRS})

#添加pcl库
find_package(PCL REQUIRED COMPONENTS common io)
include_directories(${PCL_INCLUDE_DIRS})
add_definitions(${PCL_DEFINITIONS})

#添加凸优化g2o库
find_package(G2O REQUIRED)
include_directories(${G2O_INCLUDE_DIRS})

#添加Ceres库
find_package( Ceres REQUIRED )
include_directories( ${CERES_INCLUDE_DIRS} )

#添加李代数库
find_package(Sophus REQUIRED)
include_directories(${Sophus_INCLUDE_DIRS})

#添加稀疏矩阵算法库
find_package(CSparse REQUIRED)
include_directories(${CSPARSE_INCLUDE_DIR})

#添加Eigen库,矩阵运算
include_directories("/usr/include/eigen3")

#添加共享库,将${PROJECT_NAME}这个工程名作为共享库名
add_library(${PROJECT_NAME} SHARED src/库代码1.cpp  src/库代码2.cpp  src/库代码3.cpp)

#将共享库文件链接到OpenCV、PCL、Sophus、Sophus、G2O等库文件
target_link_libraries(${PROJECT_NAME} 
${OpenCV_LIBS}  
${PCL_LIBRARIES}
${Sophus_LIBRARIES}
${CERES_LIBRARIES}
g2o_core g2o_stuff g2o_types_sba g2o_csparse_extension
)

#src文件夹下可以包含多个main函数
add_executable(可执行文件名1 src/源代码1.cpp)
add_executable(可执行文件名2 src/源代码2.cpp)

#将可执行程序链接到 共享库名 ${PROJECT_NAME} 即可,因为共享库包含了所有的库文件
target_link_libraries(可执行文件名1  ${PROJECT_NAME})
target_link_libraries(可执行文件名2  ${PROJECT_NAME})
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值