CMakeLists.txt 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196
  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. # set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Wno-deprecated -O3 -march=native ")
  12. # set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wno-deprecated -O3 -march=native")
  13. # Check C++11 or C++0x support
  14. include(CheckCXXCompilerFlag)
  15. CHECK_CXX_COMPILER_FLAG("-std=c++11" COMPILER_SUPPORTS_CXX11)
  16. CHECK_CXX_COMPILER_FLAG("-std=c++0x" COMPILER_SUPPORTS_CXX0X)
  17. if(COMPILER_SUPPORTS_CXX11)
  18. set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
  19. add_definitions(-DCOMPILEDWITHC11)
  20. message(STATUS "Using flag -std=c++11.")
  21. elseif(COMPILER_SUPPORTS_CXX0X)
  22. set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x")
  23. add_definitions(-DCOMPILEDWITHC0X)
  24. message(STATUS "Using flag -std=c++0x.")
  25. else()
  26. message(FATAL_ERROR "The compiler ${CMAKE_CXX_COMPILER} has no C++11 support. Please use a different C++ compiler.")
  27. endif()
  28. LIST(APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake_modules)
  29. find_package(OpenCV 4.0)
  30. if(NOT OpenCV_FOUND)
  31. find_package(OpenCV 3.0)
  32. if(NOT OpenCV_FOUND)
  33. message(FATAL_ERROR "OpenCV > 3.0 not found.")
  34. endif()
  35. endif()
  36. MESSAGE("OPENCV VERSION:")
  37. MESSAGE(${OpenCV_VERSION})
  38. find_package(Eigen3 3.1.0 REQUIRED)
  39. find_package(Pangolin REQUIRED)
  40. find_package(realsense2)
  41. include_directories(
  42. ${PROJECT_SOURCE_DIR}
  43. ${PROJECT_SOURCE_DIR}/include
  44. ${PROJECT_SOURCE_DIR}/include/CameraModels
  45. ${EIGEN3_INCLUDE_DIR}
  46. ${Pangolin_INCLUDE_DIRS}
  47. )
  48. set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/lib)
  49. add_library(${PROJECT_NAME} SHARED
  50. src/System.cc
  51. src/Tracking.cc
  52. src/LocalMapping.cc
  53. src/LoopClosing.cc
  54. src/ORBextractor.cc
  55. src/ORBmatcher.cc
  56. src/FrameDrawer.cc
  57. src/Converter.cc
  58. src/MapPoint.cc
  59. src/KeyFrame.cc
  60. src/Atlas.cc
  61. src/Map.cc
  62. src/MapDrawer.cc
  63. src/Optimizer.cc
  64. src/Frame.cc
  65. src/KeyFrameDatabase.cc
  66. src/Sim3Solver.cc
  67. src/Initializer.cc
  68. src/Viewer.cc
  69. src/ImuTypes.cc
  70. src/G2oTypes.cc
  71. src/CameraModels/Pinhole.cpp
  72. src/CameraModels/KannalaBrandt8.cpp
  73. src/OptimizableTypes.cpp
  74. src/MLPnPsolver.cpp
  75. src/TwoViewReconstruction.cc
  76. include/System.h
  77. include/Tracking.h
  78. include/LocalMapping.h
  79. include/LoopClosing.h
  80. include/ORBextractor.h
  81. include/ORBmatcher.h
  82. include/FrameDrawer.h
  83. include/Converter.h
  84. include/MapPoint.h
  85. include/KeyFrame.h
  86. include/Atlas.h
  87. include/Map.h
  88. include/MapDrawer.h
  89. include/Optimizer.h
  90. include/Frame.h
  91. include/KeyFrameDatabase.h
  92. include/Sim3Solver.h
  93. include/Initializer.h
  94. include/Viewer.h
  95. include/ImuTypes.h
  96. include/G2oTypes.h
  97. include/CameraModels/GeometricCamera.h
  98. include/CameraModels/Pinhole.h
  99. include/CameraModels/KannalaBrandt8.h
  100. include/OptimizableTypes.h
  101. include/MLPnPsolver.h
  102. include/TwoViewReconstruction.h
  103. include/Config.h
  104. )
  105. add_subdirectory(Thirdparty/g2o)
  106. target_link_libraries(${PROJECT_NAME}
  107. ${OpenCV_LIBS}
  108. ${EIGEN3_LIBS}
  109. ${Pangolin_LIBRARIES}
  110. ${PROJECT_SOURCE_DIR}/Thirdparty/DBoW2/lib/libDBoW2.so
  111. ${PROJECT_SOURCE_DIR}/Thirdparty/g2o/lib/libg2o.so
  112. -lboost_serialization
  113. -lcrypto
  114. )
  115. ### Build examples
  116. # RGB-D examples
  117. set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/Examples/RGB-D)
  118. add_executable(rgbd_tum
  119. Examples/RGB-D/rgbd_tum.cc)
  120. target_link_libraries(rgbd_tum ${PROJECT_NAME})
  121. # Stereo examples
  122. set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/Examples/Stereo)
  123. add_executable(stereo_kitti
  124. Examples/Stereo/stereo_kitti.cc)
  125. target_link_libraries(stereo_kitti ${PROJECT_NAME})
  126. add_executable(stereo_euroc
  127. Examples/Stereo/stereo_euroc.cc)
  128. target_link_libraries(stereo_euroc ${PROJECT_NAME})
  129. add_executable(stereo_tum_vi
  130. Examples/Stereo/stereo_tum_vi.cc)
  131. target_link_libraries(stereo_tum_vi ${PROJECT_NAME})
  132. # Monocular examples
  133. set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/Examples/Monocular)
  134. add_executable(mono_tum
  135. Examples/Monocular/mono_tum.cc)
  136. target_link_libraries(mono_tum ${PROJECT_NAME})
  137. add_executable(mono_kitti
  138. Examples/Monocular/mono_kitti.cc)
  139. target_link_libraries(mono_kitti ${PROJECT_NAME})
  140. add_executable(mono_euroc
  141. Examples/Monocular/mono_euroc.cc)
  142. target_link_libraries(mono_euroc ${PROJECT_NAME})
  143. add_executable(mono_tum_vi
  144. Examples/Monocular/mono_tum_vi.cc)
  145. target_link_libraries(mono_tum_vi ${PROJECT_NAME})
  146. # Monocular-Inertial examples
  147. set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/Examples/Monocular-Inertial)
  148. add_executable(mono_inertial_euroc
  149. Examples/Monocular-Inertial/mono_inertial_euroc.cc)
  150. target_link_libraries(mono_inertial_euroc ${PROJECT_NAME})
  151. add_executable(mono_inertial_tum_vi
  152. Examples/Monocular-Inertial/mono_inertial_tum_vi.cc)
  153. target_link_libraries(mono_inertial_tum_vi ${PROJECT_NAME})
  154. # Stereo-Inertial examples
  155. set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/Examples/Stereo-Inertial)
  156. add_executable(stereo_inertial_euroc
  157. Examples/Stereo-Inertial/stereo_inertial_euroc.cc)
  158. target_link_libraries(stereo_inertial_euroc ${PROJECT_NAME})
  159. add_executable(stereo_inertial_tum_vi
  160. Examples/Stereo-Inertial/stereo_inertial_tum_vi.cc)
  161. target_link_libraries(stereo_inertial_tum_vi ${PROJECT_NAME})