原文链接:https://blog.csdn.net/felaim/article/details/72621540
前LZ写过一个SLAM依赖库安装大全,如果按照之前大全安装的方式进行安装,后续在编译自己的工程时需要链接各种库文件和头文件,但是具体在CMakeLists.txt里怎么使用呢?这篇博客就准备汇总各种SLAM常用库的链接方法。
事例:
cmake_minimum_required( VERSION 2.8 )
project( version )
#pangolin
set( CMAKE_BUILD_TYPE Release )
set( CMAKE_CXX_FLAGS "-std=c++11 -O3" )
find_package(Pangolin)
include_directories( ${Pangolin_INCLUDE_DIRS} )
# opencv
find_package( OpenCV REQUIRED )
include_directories( ${OpenCV_INCLUDE_DIRS} )
# eigen
include_directories( "/usr/include/eigen3/" )
# pcl
find_package( PCL REQUIRED COMPONENT common io )
include_directories( ${PCL_INCLUDE_DIRS} )
add_definitions( ${PCL_DEFINITIONS} )
list(REMOVE_ITEM PCL_LIBRARIES "vtkproj4")
add_executable( main main.cpp )
target_link_libraries( main ${OpenCV_LIBS} ${PCL_LIBRARIES} ${Pangolin_LIBRARIES} )
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.1
find_package(OpenCV 3.1 REQUIRED)
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)