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
当一个库不知道该怎么写时,都试试吧。其本身怎么写也肯定是有相应的规则的。我在这里只总结这么个写法,欲知更多请学习相应的文档。