【技巧一分钟】CMakeLists.

转载自:https://mp.weixin.qq.com/s/cvyihruVtzpMpxhETC0DfA

【技巧一分钟】CMakeLists.

原创 paopaoslam 泡泡机器人SLAM 2020-01-25

作者:吴奇

本期一分钟主要带大家浏览下CMakeList的相关知识。通常拿到一份SLAM源代码的时候,我们通常离不开下面几个指令:

 
  1. mkdir build && cd build

  2. cmake ..

  3. make -j

或者是

 
  1. catkin_make

这里所有的编译指令都离不开源码中的一个特殊文件CMakeLists。对于初期SLAM新手来说,很多同学上来就无脑敲着几个命令,结果出来一堆报错,但又不知道怎么回事。本期泡泡源代码组就和大家一起看看如何在CMakeLists中设置第三方库,我们首先来看的还是经典SLAM代码ORB_SLAM2中的CMakeLists。

ORB_SLAM的CMakeLists

 
  1. cmake_minimum_required(VERSION 2.8)

  2. project(ORB_SLAM2)

  3. IF(NOT CMAKE_BUILD_TYPE_)

  4. SET(CMAKE_BUILD_TYPE RELEASE)

  5. ENDIF

  6. MESSAGE("Build type: " ${CMAKE_BUILD_TYPE})

  7. ...

  8. find_package(Eigen3 3.1.0 REQUIRED)

  9. find_package(Pangolin REQUIRED)

  10. find_package(OpenCV 3.0 QUIET)

  11. include_directories(

  12. ${PROJECT_SOURCE_DIR}

  13. ${PROJECT_SOURCE_DIR}/include

  14. ${EIGEN3_INCLUDE_DIR}

  15. ${Pangolin_INCLUDE_DIRS}

  16. ...

  17. )

  18. ...

  19. target_link_libraries(

  20. ${PROJECT_NAME}

  21. ${EIGEN3_LIBS}

  22. ${Pangolin_LIBRARIES}

  23. ${PROJECT_SOURCE_DIR}/Thirdparty/DBoW2/lib/libDBoW2.so

  24. ${PROJECT_SOURCE_DIR}/Thirdparty/g2o/lib/libg2o.so

  25. )

通过ORB_SLAM2中的CMakeLists会发现,一般来说,用CMakelists来链接第三方库通常都离不开三个命令:

 
  1. // 参数QUIET表示紧掉包没有被发现时的警告信息, REQUIRED表示若包没有找到则cmake过程停止

  2. find_package(第三方包名 需要的最低版本号 REQUIRED/QUIET)

  3. // 寻找包的头文件

  4. include_directories(${包_INCLUDE_DIRS})

  5. // 链接包的第三方库(这里是${包_LIBS}还是${包_LIBRARIES}需要依据具体的包来看)

  6. target_link_libraries(${包_LIBS}或${包_LIBRARIES})

这里就完成了一般第三方库的连接,但是有的同学电脑中可能装了俩个版本的OpenCV,如何在CMakeLists中设置连接到哪个版本呢?

CMakeLists进阶-找包包

首先确定OpenCV不同版本在电脑中的安装位置,如笔者的就是在/usr/local下以不同版本号命名:

图片

这里可以看到/usr/local下有两个不同版本opencv,opencv2.4.13和opencv3.4.8,下面来看看我们的CMakeLists如何改:

 
  1. // 明确find_package的寻找路径

  2. set(OpenCV_DIR /usr/local/opencv2.4.13/share/OpenCV)

  3. find_package(OpenCV 2.4 REQUIRED)

  4. // 告诉系统头文件在哪里

  5. include_directories(SYSTEM ${OpenCV_INCLUDE_DIRS} /usr/local/opencv2.4.13/include)

  6. // 告诉第三方库文件在哪里

  7. link_directories(${OpenCV_LIBRARY_DIRS} /usr/local/opencv2.4.13/lib)

  8. // 将库文件与项目链接上

  9. target_link_libraries(${项目名} ${OpenCV_LIBRARY_DIRS})

这里我们就成功将项目中的OpenCV版本号指定好,可以愉快地进行开发了~ 本期的一分钟到这里就结束了~这是泡泡技巧一分钟的第一次推送,大家有什么好的建议或者想了解程序方面的某些知识,都可以在评论区留言,后面会陆续给大家带来更多精彩内容的分享~

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值