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