Ceres学习笔记之CMakeLists写法总结

Ceres学习笔记之CMakeLists写法总结

高博说:不要长期徘徊在自己的舒适区里犹豫不决,这样是没有进步的。 这句话开启了我的SLAM后端优化学习之路。本文从CMakeLists开始,总结常用的各个库在CMakeLists中的写法。
众人:哇!又是这么小儿科的吗?
博主:哎呀~~不要这样讲嘛~~~(QWQ我会一直努力的)

博主学习了CMake Practice(附上下载链接),整整九章的内容,跟着教程实践且做了细细密密的笔记,然,自己在工程实践时还是会发问:啊这个CMakeLists要怎么写啊!实在是真的菜,遂事无巨细记录之,记录的过程是回顾、也是加强理解的过程。


通常的CMakeLists结构是:

cmake_minimum_required( VERSION 2.8 )
project( projectname )
find_packages( , )
include_directories( )
add_executable( , )
target_link_libraries( , )

前两行不谈,看看find_packages

find_package写法

对于OpenCV我们是这样写的:

find_package( OpenCV 3.1 REQUIRED )
find_package( OpenCV REQUIRED ) #OpenCV2

对于g2o
find_package( G2O REQUIRED )

而对于ceres就很自然是这样了

find_package( Ceres REQUIRED)

总结:大部分库按find_package(库名 REQUIRED)写find_package


include_directories写法

对于OpenCV我们是这样写的:
include_directories( ${OpenCV_INCLUDE_DIRS} )
对于G2O:
include_directories(${G2O_INCLUDE_DIRS})
对于CSPARSE:
include_directories( ${CSPARSE_INCLUDE_DIR} )
eigen:
include_directories( "/usr/include/eigen3/")
那么ceres:
include_directories( ${CERES_INCLUDE_DIRS})
这里博主以为是DIR还是DIRS是看库的情况而定的,但上面几个库我把s去掉了似乎也没有什么异常。那么保险起见还是添上s吧。看这个问答:INCLUDE_DIR or INCLUDE_DIRS?

总结:include_directories(${库名_INCLUDE_DIRS})


target_link_libraries写法

库链接部分见一个例子:
target_link_libraries( 可执行文件名 ${OpenCV_LIBS} g2o_core g2o_stuff g2o_types_sba g2o_csparse_extension ${CSPARSE_LIBRARY} ${CERES_LIBRARIES})

有这几种写法:

  • 库名_LIBS
  • 库名_LIBRARY
  • 库名_LIBRARIES
    当一个库不知道该怎么写时,都试试吧。其本身怎么写也肯定是有相应的规则的。我在这里只总结这么个写法,欲知更多请学习相应的文档。

猜你喜欢

转载自blog.csdn.net/sinat_28752257/article/details/82758546
今日推荐