CMakeLists.txt 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344
  1. cmake_minimum_required(VERSION 2.8)
  2. project(ORB_SLAM3)
  3. IF(NOT CMAKE_BUILD_TYPE)
  4. SET(CMAKE_BUILD_TYPE Release)
  5. ENDIF()
  6. MESSAGE("Build type: " ${CMAKE_BUILD_TYPE})
  7. set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -O3")
  8. set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -O3")
  9. set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -march=native")
  10. set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -march=native")
  11. # Check C++14 or C++0x support
  12. include(CheckCXXCompilerFlag)
  13. CHECK_CXX_COMPILER_FLAG("-std=c++14" COMPILER_SUPPORTS_CXX14)
  14. CHECK_CXX_COMPILER_FLAG("-std=c++0x" COMPILER_SUPPORTS_CXX0X)
  15. if(COMPILER_SUPPORTS_CXX14)
  16. set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++14")
  17. add_definitions(-DCOMPILEDWITHC14)
  18. message(STATUS "Using flag -std=c++14.")
  19. elseif(COMPILER_SUPPORTS_CXX0X)
  20. set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x")
  21. add_definitions(-DCOMPILEDWITHC0X)
  22. message(STATUS "Using flag -std=c++0x.")
  23. else()
  24. message(FATAL_ERROR "The compiler ${CMAKE_CXX_COMPILER} has no C++11 support. Please use a different C++ compiler.")
  25. endif()
  26. LIST(APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake_modules)
  27. set(CMAKE_PREFIX_PATH "/usr/local/include/opencv4")
  28. find_package(OpenCV 4.8.1)
  29. if(NOT OpenCV_FOUND)
  30. message(FATAL_ERROR "OpenCV > 4.2 not found.")
  31. endif()
  32. MESSAGE("OPENCV VERSION:")
  33. MESSAGE(${OpenCV_VERSION})
  34. find_package(Eigen3 3.1.0 REQUIRED)
  35. find_package(Pangolin REQUIRED)
  36. find_package(realsense2)
  37. include_directories(
  38. ${PROJECT_SOURCE_DIR}
  39. ${PROJECT_SOURCE_DIR}/include
  40. ${PROJECT_SOURCE_DIR}/include/CameraModels
  41. ${PROJECT_SOURCE_DIR}/Thirdparty/Sophus
  42. ${EIGEN3_INCLUDE_DIR}
  43. ${Pangolin_INCLUDE_DIRS}
  44. )
  45. set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/lib)
  46. file(GLOB_RECURSE SRC_FILES CONFIGURE_DEPENDS
  47. ${CMAKE_CURRENT_SOURCE_DIR}/src/*.cc
  48. ${CMAKE_CURRENT_SOURCE_DIR}/src/*.cpp
  49. )
  50. file(GLOB_RECURSE HEADER_FILES CONFIGURE_DEPENDS
  51. ${CMAKE_CURRENT_SOURCE_DIR}/include/*.h
  52. )
  53. add_library(${PROJECT_NAME} SHARED
  54. ${SRC_FILES}
  55. ${HEADER_FILES}
  56. )
  57. add_subdirectory(Thirdparty/g2o)
  58. target_link_libraries(${PROJECT_NAME}
  59. ${OpenCV_LIBS}
  60. ${EIGEN3_LIBS}
  61. ${Pangolin_LIBRARIES}
  62. ${PROJECT_SOURCE_DIR}/Thirdparty/DBoW2/lib/libDBoW2.so
  63. ${PROJECT_SOURCE_DIR}/Thirdparty/g2o/lib/libg2o.so
  64. -lboost_serialization
  65. -lcrypto
  66. )
  67. # If RealSense SDK is found the library is added and its examples compiled
  68. if(realsense2_FOUND)
  69. include_directories(${PROJECT_NAME}
  70. ${realsense_INCLUDE_DIR}
  71. )
  72. target_link_libraries(${PROJECT_NAME}
  73. ${realsense2_LIBRARY}
  74. )
  75. endif()
  76. # Build examples
  77. # RGB-D examples
  78. set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/Examples/RGB-D)
  79. add_executable(rgbd_tum
  80. Examples/RGB-D/rgbd_tum.cc)
  81. target_link_libraries(rgbd_tum ${PROJECT_NAME})
  82. if(realsense2_FOUND)
  83. add_executable(rgbd_realsense_D435i
  84. Examples/RGB-D/rgbd_realsense_D435i.cc)
  85. target_link_libraries(rgbd_realsense_D435i ${PROJECT_NAME})
  86. endif()
  87. # RGB-D inertial examples
  88. set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/Examples/RGB-D-Inertial)
  89. if(realsense2_FOUND)
  90. add_executable(rgbd_inertial_realsense_D435i
  91. Examples/RGB-D-Inertial/rgbd_inertial_realsense_D435i.cc)
  92. target_link_libraries(rgbd_inertial_realsense_D435i ${PROJECT_NAME})
  93. endif()
  94. #Stereo examples
  95. set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/Examples/Stereo)
  96. add_executable(stereo_kitti
  97. Examples/Stereo/stereo_kitti.cc)
  98. target_link_libraries(stereo_kitti ${PROJECT_NAME})
  99. add_executable(stereo_euroc
  100. Examples/Stereo/stereo_euroc.cc)
  101. target_link_libraries(stereo_euroc ${PROJECT_NAME})
  102. add_executable(stereo_tum_vi
  103. Examples/Stereo/stereo_tum_vi.cc)
  104. target_link_libraries(stereo_tum_vi ${PROJECT_NAME})
  105. if(realsense2_FOUND)
  106. add_executable(stereo_realsense_t265
  107. Examples/Stereo/stereo_realsense_t265.cc)
  108. target_link_libraries(stereo_realsense_t265 ${PROJECT_NAME})
  109. add_executable(stereo_realsense_D435i
  110. Examples/Stereo/stereo_realsense_D435i.cc)
  111. target_link_libraries(stereo_realsense_D435i ${PROJECT_NAME})
  112. endif()
  113. #Monocular examples
  114. set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/Examples/Monocular)
  115. add_executable(mono_tum
  116. Examples/Monocular/mono_tum.cc)
  117. target_link_libraries(mono_tum ${PROJECT_NAME})
  118. add_executable(mono_kitti
  119. Examples/Monocular/mono_kitti.cc)
  120. target_link_libraries(mono_kitti ${PROJECT_NAME})
  121. add_executable(mono_euroc
  122. Examples/Monocular/mono_euroc.cc)
  123. target_link_libraries(mono_euroc ${PROJECT_NAME})
  124. add_executable(mono_tum_vi
  125. Examples/Monocular/mono_tum_vi.cc)
  126. target_link_libraries(mono_tum_vi ${PROJECT_NAME})
  127. if(realsense2_FOUND)
  128. add_executable(mono_realsense_t265
  129. Examples/Monocular/mono_realsense_t265.cc)
  130. target_link_libraries(mono_realsense_t265 ${PROJECT_NAME})
  131. add_executable(mono_realsense_D435i
  132. Examples/Monocular/mono_realsense_D435i.cc)
  133. target_link_libraries(mono_realsense_D435i ${PROJECT_NAME})
  134. endif()
  135. #Monocular inertial examples
  136. set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/Examples/Monocular-Inertial)
  137. add_executable(mono_inertial_euroc
  138. Examples/Monocular-Inertial/mono_inertial_euroc.cc)
  139. target_link_libraries(mono_inertial_euroc ${PROJECT_NAME})
  140. add_executable(mono_inertial_tum_vi
  141. Examples/Monocular-Inertial/mono_inertial_tum_vi.cc)
  142. target_link_libraries(mono_inertial_tum_vi ${PROJECT_NAME})
  143. if(realsense2_FOUND)
  144. add_executable(mono_inertial_realsense_t265
  145. Examples/Monocular-Inertial/mono_inertial_realsense_t265.cc)
  146. target_link_libraries(mono_inertial_realsense_t265 ${PROJECT_NAME})
  147. add_executable(mono_inertial_realsense_D435i
  148. Examples/Monocular-Inertial/mono_inertial_realsense_D435i.cc)
  149. target_link_libraries(mono_inertial_realsense_D435i ${PROJECT_NAME})
  150. endif()
  151. #Stereo Inertial examples
  152. set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/Examples/Stereo-Inertial)
  153. add_executable(stereo_inertial_euroc
  154. Examples/Stereo-Inertial/stereo_inertial_euroc.cc)
  155. target_link_libraries(stereo_inertial_euroc ${PROJECT_NAME})
  156. add_executable(stereo_inertial_tum_vi
  157. Examples/Stereo-Inertial/stereo_inertial_tum_vi.cc)
  158. target_link_libraries(stereo_inertial_tum_vi ${PROJECT_NAME})
  159. if(realsense2_FOUND)
  160. add_executable(stereo_inertial_realsense_t265
  161. Examples/Stereo-Inertial/stereo_inertial_realsense_t265.cc)
  162. target_link_libraries(stereo_inertial_realsense_t265 ${PROJECT_NAME})
  163. add_executable(stereo_inertial_realsense_D435i
  164. Examples/Stereo-Inertial/stereo_inertial_realsense_D435i.cc)
  165. target_link_libraries(stereo_inertial_realsense_D435i ${PROJECT_NAME})
  166. endif()
  167. set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/Examples/Calibration)
  168. if(realsense2_FOUND)
  169. add_executable(recorder_realsense_D435i
  170. Examples/Calibration/recorder_realsense_D435i.cc)
  171. target_link_libraries(recorder_realsense_D435i ${PROJECT_NAME})
  172. add_executable(recorder_realsense_T265
  173. Examples/Calibration/recorder_realsense_T265.cc)
  174. target_link_libraries(recorder_realsense_T265 ${PROJECT_NAME})
  175. endif()
  176. #Old examples
  177. # RGB-D examples
  178. set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/Examples_old/RGB-D)
  179. add_executable(rgbd_tum_old
  180. Examples_old/RGB-D/rgbd_tum.cc)
  181. target_link_libraries(rgbd_tum_old ${PROJECT_NAME})
  182. if(realsense2_FOUND)
  183. add_executable(rgbd_realsense_D435i_old
  184. Examples_old/RGB-D/rgbd_realsense_D435i.cc)
  185. target_link_libraries(rgbd_realsense_D435i_old ${PROJECT_NAME})
  186. endif()
  187. # RGB-D inertial examples
  188. set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/Examples_old/RGB-D-Inertial)
  189. if(realsense2_FOUND)
  190. add_executable(rgbd_inertial_realsense_D435i_old
  191. Examples_old/RGB-D-Inertial/rgbd_inertial_realsense_D435i.cc)
  192. target_link_libraries(rgbd_inertial_realsense_D435i_old ${PROJECT_NAME})
  193. endif()
  194. #Stereo examples
  195. set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/Examples_old/Stereo)
  196. add_executable(stereo_kitti_old
  197. Examples_old/Stereo/stereo_kitti.cc)
  198. target_link_libraries(stereo_kitti_old ${PROJECT_NAME})
  199. add_executable(stereo_euroc_old
  200. Examples_old/Stereo/stereo_euroc.cc)
  201. target_link_libraries(stereo_euroc_old ${PROJECT_NAME})
  202. add_executable(stereo_tum_vi_old
  203. Examples_old/Stereo/stereo_tum_vi.cc)
  204. target_link_libraries(stereo_tum_vi_old ${PROJECT_NAME})
  205. if(realsense2_FOUND)
  206. add_executable(stereo_realsense_t265_old
  207. Examples_old/Stereo/stereo_realsense_t265.cc)
  208. target_link_libraries(stereo_realsense_t265_old ${PROJECT_NAME})
  209. add_executable(stereo_realsense_D435i_old
  210. Examples_old/Stereo/stereo_realsense_D435i.cc)
  211. target_link_libraries(stereo_realsense_D435i_old ${PROJECT_NAME})
  212. endif()
  213. #Monocular examples
  214. set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/Examples_old/Monocular)
  215. add_executable(mono_tum_old
  216. Examples_old/Monocular/mono_tum.cc)
  217. target_link_libraries(mono_tum_old ${PROJECT_NAME})
  218. add_executable(mono_kitti_old
  219. Examples_old/Monocular/mono_kitti.cc)
  220. target_link_libraries(mono_kitti_old ${PROJECT_NAME})
  221. add_executable(mono_euroc_old
  222. Examples_old/Monocular/mono_euroc.cc)
  223. target_link_libraries(mono_euroc_old ${PROJECT_NAME})
  224. add_executable(mono_tum_vi_old
  225. Examples_old/Monocular/mono_tum_vi.cc)
  226. target_link_libraries(mono_tum_vi_old ${PROJECT_NAME})
  227. if(realsense2_FOUND)
  228. add_executable(mono_realsense_t265_old
  229. Examples_old/Monocular/mono_realsense_t265.cc)
  230. target_link_libraries(mono_realsense_t265_old ${PROJECT_NAME})
  231. add_executable(mono_realsense_D435i_old
  232. Examples_old/Monocular/mono_realsense_D435i.cc)
  233. target_link_libraries(mono_realsense_D435i_old ${PROJECT_NAME})
  234. endif()
  235. #Monocular inertial examples
  236. set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/Examples_old/Monocular-Inertial)
  237. add_executable(mono_inertial_euroc_old
  238. Examples_old/Monocular-Inertial/mono_inertial_euroc.cc)
  239. target_link_libraries(mono_inertial_euroc_old ${PROJECT_NAME})
  240. add_executable(mono_inertial_tum_vi_old
  241. Examples_old/Monocular-Inertial/mono_inertial_tum_vi.cc)
  242. target_link_libraries(mono_inertial_tum_vi_old ${PROJECT_NAME})
  243. if(realsense2_FOUND)
  244. add_executable(mono_inertial_realsense_t265_old
  245. Examples_old/Monocular-Inertial/mono_inertial_realsense_t265.cc)
  246. target_link_libraries(mono_inertial_realsense_t265_old ${PROJECT_NAME})
  247. add_executable(mono_inertial_realsense_D435i_old
  248. Examples_old/Monocular-Inertial/mono_inertial_realsense_D435i.cc)
  249. target_link_libraries(mono_inertial_realsense_D435i_old ${PROJECT_NAME})
  250. endif()
  251. #Stereo Inertial examples
  252. set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/Examples_old/Stereo-Inertial)
  253. add_executable(stereo_inertial_euroc_old
  254. Examples_old/Stereo-Inertial/stereo_inertial_euroc.cc)
  255. target_link_libraries(stereo_inertial_euroc_old ${PROJECT_NAME})
  256. add_executable(stereo_inertial_tum_vi_old
  257. Examples_old/Stereo-Inertial/stereo_inertial_tum_vi.cc)
  258. target_link_libraries(stereo_inertial_tum_vi_old ${PROJECT_NAME})
  259. if(realsense2_FOUND)
  260. add_executable(stereo_inertial_realsense_t265_old
  261. Examples_old/Stereo-Inertial/stereo_inertial_realsense_t265.cc)
  262. target_link_libraries(stereo_inertial_realsense_t265_old ${PROJECT_NAME})
  263. add_executable(stereo_inertial_realsense_D435i_old
  264. Examples_old/Stereo-Inertial/stereo_inertial_realsense_D435i.cc)
  265. target_link_libraries(stereo_inertial_realsense_D435i_old ${PROJECT_NAME})
  266. endif()