1. 程式人生 > >Ceres學習筆記之CMakeLists寫法總結

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
    當一個庫不知道該怎麼寫時,都試試吧。其本身怎麼寫也肯定是有相應的規則的。我在這裡只總結這麼個寫法,欲知更多請學習相應的文件。