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