【SLAM】SLAM中常用库的CMake写法(如何添加各种依赖库)
之前LZ写过一个SLAM依赖库安装大全如果按照之前大全安装的方式进行安装后续在编译自己的工程时需要链接各种库文件和头文件但是具体在CMakeLists.txt里怎么使用呢这篇博客就准备汇总各种SLAM常用库的链接方法。1.添加Eigen头文件Eigen通过apt-get安装之后我们要怎么使用这个依赖库呢Eigen有一点很奇怪Eigen库只有头文件所以我们在CMakeLists.txt中是不需要写target_link_libraries因为我们是通过apt安装的所以很容易的知道Eigen库的位置就是在/usr/include/eigen3#添加头文件include_directories(/usr/include/eigen3)因为我们已经知道Eigen具体的位置就不用使用find_package来寻找了虽然有些粗暴但是简单有效。2.添加Pangolin依赖Pangolin的安装也很简单功能主要就是做三维的可视化显示主要依赖库是OpenGL通过apt也很好安装。find_package(Pangolin)include_directories(${Pangolin_INCLUDE_DIRS})add_executable(project_name filename.cpp)target_link_libraries(project_name ${Pangolin_LIBRARIES})3.添加Sophus依赖Sophus实际上是Eigen库的扩展模块Eigen中虽然有几何模块但是没有提供李代数的支持所以Sophus算是一个比较好的李代数库安装参考之前博文。find_package(Sophus REQUIRED)include_directories(${Sophus_INCLUDE_DIRS})add_executable(project_name project_name.cpp)target_link_libraries(project_name ${Sophus_LIBRARIES})4.添加OpenCV依赖OpenCV经常会出现版本不兼容的问题LZ同时安装了OpenCV2和OpenCV3两个版本所以在CMakeLists.txt要指定OpenCV的版本。#指定OpenCV的版本是3.1find_package(OpenCV3.1REQUIRED)include_directories(${OpenCV_INCLUDE_DIRS})add_executable(project_name filename.cpp)target_link_libraries(project_name ${OpenCV_LIBS})添加OpenCV要注意一个问题大小写很重要大小写5.添加PCL依赖这个点云库在SLAM应用中还是蛮重要的通常情况下好像也都有安装安装很简单这里还是讲一下CMakeLists.txt中怎么写find_package(PCL REQUIRED COMPONENT common io)include_directories(${PCL_INCLUDE_DIRS})add_definitions(${PCL_DEFINITIONS})target_link_libraries(project_name ${PCL_LIBRARIES})6.添加Ceres依赖Ceres是Google出品的一个优化库安装编译都在LZ之前写过一个SLAM安装大全里都有。因为Ceres不是常用的库所以需要添加一个cmake_modules。LZ这里把对应的cmake_modules文件夹中的文件分享给小伙伴有需要的可以自行下载。链接: http://pan.baidu.com/s/1o8dTy8i 密码: zmiv#这行代码就是添加查找Ceres的一个文件list(APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake_modules)find_package(Ceres REQUIRED)include_directories(${CERES_INCLUDE_DIRS})target_link_libraries(project_name ${CERES_LIBRARIES})7添加G2O的依赖其实这个也是千篇一律换汤不换药。这里也是要注意几个问题第一个要在cmake_module中假如findG2O的文件链接: http://pan.baidu.com/s/1kVp4Ul5 密码: yeu4又需要的小伙伴可以自行下载。第二个注意大小写问题还有数字0和字母0这个还是要注意的。list(APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake_modules)find_package(G2O REQUIRED)include_directories(${G20_INCLUDE_DIRS})target_link_libraries(project_name g2o_core g2o_stuff)SLAM的相关依赖库有很多而且针对不同的代码使用的依赖库是不一样的所以用到一种LZ也会更新一种本篇博客未完待续啦。。。O(∩_∩)O