对自己在学习SLAM、C++过程中遇到的编写规律进行总结,希望可以帮到大家。
1. 声明最小版本需求
cmake_minimum_required(VERSION xxx)
2. 设置项目名称
project(xxx)
3. 通过设置变量CMAKE_BUILD_TYPE来配置编译类型(Debug、Release……)
set(CMAKE_BUILD_TYPE Debug)
4. 通过设置变量CMAKE_CXX_FLAGS来设置编译选项
set(CMAKE_CXX_FLAGS "-std=c++11")
5.引入第三方库
find_package 命令:在目录中查找相关配置文件,将头文件目录设置到 ${xxx_INCLUDE_DIRS} 中,将链接库设置到 ${xxx_LIBS} 中。
include_directories命令:给编译器提供头文件配置。
一般情况下(在引入第三方库)上述两命令配合使用。
# Eigen 库
include_directories("/usr/include/eigen3")
# Sophus 库
find_package(Sophus REQUIRED)
include_directories(${Sophus_INCLUDE_DIRS})
# Opencv 库
find_package(OpenCV REQUIRED)
include_directories(${OpenCV_INCLUDE_DIRS})
# g2o 库
find_package(G2O REQUIRED)
include_directories(${G2O_INCLUDE_DIRS})
6. 生成可执行文件
add_executable(demo demo.cpp)
7. 链接第三方库
target_link_libraries(demo ${OpenCV_LIBS})
在引入第三方库时,“find_package”、“include_directories”、 “ target_link_libraries” 三条命令经常一同使用
8. 源文件中包含自定义函数的调用时
add_executable(demo demo.cpp function.cpp)
include_directories(.)
其中demo.cpp即为主文件,function.cpp为主文件中调用的函数文件。
include_directries后填写function.h文件的路径。
CMakeList.txt 简单示例
cmake_minimum_required(VERSION 2.8)
# 声明camke最小版本需求
project(useEigen)
# 设置项目名称
set(CMAKE_BUILD_TYPE "Release")
set(CMAKE_CXX_FLAGS "-O3")
#编译相关选项设置
include_directories("/usr/include/eigen3")
# 添加Eigen头文件
add_executable(eigenMatrix eigenMatrix.cpp)
#生成可执行文件
CMakeList.txt 常见错误
1. CMakeLists.txt 文件名出错,无法识别
2. 编译相关设置问题
3. 第三方软件库链接出错