SLAM学习快速入门---CMake简单、基础语法

前言


研究生阶段开启SLAM的旅程,从此篇博文起会开启一个新的SLAM专题,用以记录入门过程中的问题解决以及笔记分享,内容大多会涉及应用,原理剖析有能力的话后续会添加进来。如有纰漏,敬请指正!
今天记录CMake的有关知识,这是读者在linux上运行cpp代码的必要一环。

一、几个最简单的案例入门

  1. Hello Eigen教程

    # 声明所需要的cmake的最低版本
    cmake_minimum_required(VERSION 3.11)
    # 声明一个cmake工程
    project(SLAMBook-Eigen)
    # 添加头文件库
    include_directories("/usr/include/eigen3")
    # 添加一个可执行程序
    add_executable(helloEigen eigenMatrix.cpp)
    
  2. Hello PCL教程

    # 指定最小的版本
    cmake_minimum_required(VERSION 3.14)
    # 指定项目名称
    project(pcl_module)
    # 找到pcl的指定库和文件位置
    find_package(PCL REQUIRED)
    # 生成可执行文件
    add_executable(pcl_module src/pcl_module.cpp)
    # 添加头文件库
    include_directories(
        ${PCL_LIBRARIES}
        /usr/include/eigen3
    )
    # 链接三方库
    target_link_libraries(pcl_module
        ${PCL_LIBRARIES}
    )
    # eigen仅由头文件构成,不需要库文件
    
  3. Hello Cmake教程

# demostrate the minimum version of cmake 
cmake_minimum_required(VERSION 3.16)
# define the project name
project(HelloSLAM)
# generate library file
add_library(hello_shared SHARED libHelloSLAM.cpp)
# generate executable file
add_executable(main helloSLAM.cpp)
# link to library
target_link_libraries(main hello_shared)

二、Cmake书写语法

2.1 必备语句
  • cmake_minimum_required(VRESION 3.14)

    用于指定cmake的版本,一般需要添加上

  • project(HelloSLAM)

    用于指定项目名称(好像不是必须的,但是建议添加上)

  • add_executable(main helloSLAM.cpp)

    用于生成可执行文件

    main -> 所生成的可执行文件的名称 helloSLAM.cpp -> 代码编写的源文件

2.2 库包含、链接语句
  • 三方module:

    三方模块一般由两部分组成:头文件库文件

    1. 头文件需要包含,使用命令 include_directories()
    2. 库文件需要链接,使用命令 target_link_libraries()

    需要注意的小问题:

    • 有些module仅由头文件构成,没有库文件,因此仅需要包含头文件,不需要链接库文件,SLAM中最典型Eigen,具体请参照Hello Eigen教程

      include_directories("/usr/include/eigen3")

    • 有时module的路径不容易寻找,或者每个使用者的安装位置不同,无法写死,于是出现find_package命令,具体参照Hello PCL教程

      find_package(PCL REQUIRED)查找pcl模块路径,后续所有路径均使用${PCL_LIBRARIES}代替

      此处还有几点需要强调一下:

      1. PCL模块不仅需要include_directories(),还需要target_link_libraries()
      2. find_package()命令查找模块时,名称暂时还不知道怎么确定,比如哪个大写,哪个小写等等(有知晓的同学可以告知一声)
  • 自己写的module:

    自己写module需要包含若干个文件:source.cpp module.h module.cpp

    1. module.cpp 对应库文件,需要编译为库文件,供使用者调用

      CPP中的库文件分为静态库和共享库两类

      1. 静态库:.a 作为后缀名,静态库每次被调用都会生成一个副本,使用add_library(hello libHelloSLAM.cpp)生成
      2. 共享库:.so 作为后缀名,共享库只会有一个副本,使用add_library(hello_shared SHARED libhelloSLAM.cpp)生成

      库文件生成之后,需要使用target_link_libraries()将库文件连接至可执行文件上

    2. module.h 对应头文件,指明库文件的用途

      头文件需要使用include_directories()命令包含头文件路径

      几点需要说明的:

      1. 如果.h文件CMakeLists.txt同级目录,就可以不使用include_directories()命令进行包含
      2. 如果.h文件放置在当前目录下的include文件夹中,需要添加include_directories(./include)命令包含头文件

三、有关于Cmake使用的几点说明:

  • CMakeLists.txt 书写路径以CMakeLists.txt 文件的同级目录为准

    上述关于自定义.h的说明就是这个意思,源文件和其他文件也类似,假设你源文件放置在src目录,对应需要更改

  • 关于build文件夹的说明:

    利用cmake管理工程时,cmake会生成若干相关文件,发布代码时需要删除(与代码无法,使用者编译运行仅需txt文件即可),因此使用build文件夹与源代码隔离开,便于操作

    mkdir ./build
    cd ./build
    cmake .. # ..进入上一级文件夹执行cmake命令
    make
    ./executableFile
    

四、后记

此篇文章内容大多依赖于视觉SLAM14讲,介绍CMake的工程应用和简单语法,可以使读者在开始时能够成功调试自己编写的代码以及14讲中的代码,具有初步的开发能力,高阶的语法和使用后续会不断补充。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值