# Top-Level CmakeLists.txt # For GNUInstallDirs cmake_minimum_required(VERSION 2.8.5) PROJECT( RTABMap ) SET(PROJECT_PREFIX rtabmap) # Catkin doesn't support multiarch library path, # fix to "lib" if not set by user. OPTION(MULTI_ARCH "Activate multi-arch lib directory (debian)" OFF) IF(NOT MULTI_ARCH AND NOT DEFINED CMAKE_INSTALL_LIBDIR) set(CMAKE_INSTALL_LIBDIR "lib") ENDIF(NOT MULTI_ARCH AND NOT DEFINED CMAKE_INSTALL_LIBDIR) INCLUDE(GNUInstallDirs) ####### local cmake modules ####### SET(CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake_modules") ####################### # VERSION ####################### SET(RTABMAP_MAJOR_VERSION 0) SET(RTABMAP_MINOR_VERSION 14) SET(RTABMAP_PATCH_VERSION 3) SET(RTABMAP_VERSION ${RTABMAP_MAJOR_VERSION}.${RTABMAP_MINOR_VERSION}.${RTABMAP_PATCH_VERSION}) SET(PROJECT_VERSION "${RTABMAP_VERSION}") SET(PROJECT_VERSION_MAJOR ${RTABMAP_MAJOR_VERSION}) SET(PROJECT_VERSION_MINOR ${RTABMAP_MINOR_VERSION}) SET(PROJECT_VERSION_PATCH ${RTABMAP_PATCH_VERSION}) SET(PROJECT_SOVERSION "${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}") ####### COMPILATION PARAMS ####### # In case of Makefiles if the user does not setup CMAKE_BUILD_TYPE, assume it's Release: IF(${CMAKE_GENERATOR} MATCHES ".*Makefiles") IF("${CMAKE_BUILD_TYPE}" STREQUAL "") set(CMAKE_BUILD_TYPE Release) ENDIF("${CMAKE_BUILD_TYPE}" STREQUAL "") ENDIF(${CMAKE_GENERATOR} MATCHES ".*Makefiles") IF(NOT ANDROID) SET(CMAKE_DEBUG_POSTFIX "d") ENDIF(NOT ANDROID) IF(WIN32 AND NOT MINGW) ADD_DEFINITIONS("-DNOMINMAX") ADD_DEFINITIONS("-wd4100 -wd4127 -wd4150 -wd4191 -wd4242 -wd4244 -wd4251 -wd4305 -wd4365 -wd4512 -wd4514 -wd4548 -wd4571 -wd4619 -wd4625 -wd4626 -wd4628 -wd4668 -wd4710 -wd4711 -wd4738 -wd4820 -wd4946 -wd4986") ELSE () ADD_DEFINITIONS( "-Wall" ) ADD_DEFINITIONS("-Wno-unknown-pragmas") ENDIF() if(POLICY CMP0020) cmake_policy(SET CMP0020 OLD) endif() if(POLICY CMP0043) cmake_policy(SET CMP0043 OLD) endif() IF(MINGW) # Hide the --enable-auto-import warning SET(CMAKE_EXE_LINKER_FLAGS "-Wl,--enable-auto-import") SET(CMAKE_MODULE_LINKER_FLAGS "-Wl,--enable-auto-import") SET(CMAKE_SHARED_LINKER_FLAGS "-Wl,--enable-auto-import") ENDIF(MINGW) # GCC 4 required IF(UNIX OR MINGW) EXEC_PROGRAM( gcc ARGS "-dumpversion" OUTPUT_VARIABLE GCC_VERSION ) IF(GCC_VERSION VERSION_LESS "4.0.0") MESSAGE(FATAL_ERROR "GCC ${GCC_VERSION} found, but version 4.x.x minimum is required") ENDIF(GCC_VERSION VERSION_LESS "4.0.0") ENDIF(UNIX OR MINGW) #The CDT Error Parser cannot handle error messages that span #more than one line, which is the default gcc behavior. #In order to force gcc to generate single line error messages with no line wrapping IF(CMAKE_COMPILER_IS_GNUCC) SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fmessage-length=0") ENDIF(CMAKE_COMPILER_IS_GNUCC) IF(CMAKE_COMPILER_IS_GNUCXX) SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fmessage-length=0") ENDIF(CMAKE_COMPILER_IS_GNUCXX) # [Eclipse] Automatic Discovery of Include directories (Optional, but handy) #SET(CMAKE_VERBOSE_MAKEFILE ON) #Other paths... IF(APPLE) # For Mac ports SET(CMAKE_INCLUDE_PATH "/opt/local/include;${CMAKE_INCLUDE_PATH}") SET(CMAKE_LIBRARY_PATH "/opt/local/lib;${CMAKE_LIBRARY_PATH}") ENDIF() ####### Build libraries as shared or static ####### OPTION( BUILD_SHARED_LIBS "Set to OFF to build static libraries" ON ) ####### OUTPUT DIR ####### SET(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/bin) SET(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/bin) SET(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/lib) # Avoid Visual Studio bin/Release and bin/Debug sub directories SET( CMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}") SET( CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}") SET( CMAKE_LIBRARY_OUTPUT_DIRECTORY_DEBUG "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}") SET( CMAKE_LIBRARY_OUTPUT_DIRECTORY_RELEASE "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}") SET( CMAKE_ARCHIVE_OUTPUT_DIRECTORY_DEBUG "${CMAKE_ARCHIVE_OUTPUT_DIRECTORY}") SET( CMAKE_ARCHIVE_OUTPUT_DIRECTORY_RELEASE "${CMAKE_ARCHIVE_OUTPUT_DIRECTORY}") ####### INSTALL DIR ####### set(INSTALL_INCLUDE_DIR include/${PROJECT_PREFIX}-${RTABMAP_MAJOR_VERSION}.${RTABMAP_MINOR_VERSION} CACHE PATH "Installation directory for header files") if(WIN32 AND NOT CYGWIN) set(DEF_INSTALL_CMAKE_DIR CMake) else() set(DEF_INSTALL_CMAKE_DIR ${CMAKE_INSTALL_LIBDIR}/${PROJECT_PREFIX}-${RTABMAP_MAJOR_VERSION}.${RTABMAP_MINOR_VERSION}) endif() set(INSTALL_CMAKE_DIR ${DEF_INSTALL_CMAKE_DIR} CACHE PATH "Installation directory for CMake files") ####### BUILD OPTIONS ####### # ANDROID_PREBUILD (early exit if true) OPTION( ANDROID_PREBUILD "Set to ON to build rtabmap resource build tool (required for android build)" OFF ) IF(ANDROID_PREBUILD) MESSAGE("Option ANDROID_PREBUILD is set, only rtabmap resource tool will be built. You can use android toolchain after that.") ADD_SUBDIRECTORY( utilite ) return() ENDIF(ANDROID_PREBUILD) IF(APPLE) OPTION(BUILD_AS_BUNDLE "Set to ON to build as bundle (DragNDrop)" OFF) ENDIF(APPLE) OPTION(BUILD_APP "Build main application" ON) OPTION(BUILD_TOOLS "Build tools" ON) OPTION(BUILD_EXAMPLES "Build examples" ON) ####### DEPENDENCIES ####### IF(ANDROID) option(WITH_QT "Include Qt support" OFF) ELSE() option(WITH_QT "Include Qt support" ON) ENDIF() option(WITH_FREENECT "Include Freenect support" ON) option(WITH_FREENECT2 "Include Freenect2 support" ON) option(WITH_K4W2 "Include Kinect for Windows v2 support" ON) option(WITH_OPENNI2 "Include OpenNI2 support" ON) option(WITH_DC1394 "Include dc1394 support" ON) option(WITH_G2O "Include g2o support" ON) option(WITH_GTSAM "Include GTSAM support" ON) option(WITH_TORO "Include TORO support" ON) option(WITH_VERTIGO "Include Vertigo support" ON) option(WITH_CVSBA "Include cvsba support" ON) option(WITH_POINTMATCHER "Include libpointmatcher support" ON) option(WITH_FLYCAPTURE2 "Include FlyCapture2/Triclops support" ON) option(WITH_ZED "Include ZED sdk support" ON) option(WITH_REALSENSE "Include RealSense support" ON) option(WITH_REALSENSE_SLAM "Include RealSenseSlam support" ON) option(WITH_OCTOMAP "Include Octomap support" ON) option(WITH_CPUTSDF "Include CPUTSDF support" ON) option(WITH_FOVIS "Include FOVIS support" ON) option(WITH_VISO2 "Include VISO2 support" ON) option(WITH_DVO "Include DVO support" ON) option(WITH_ORB_SLAM2 "Include ORB_SLAM2 support" ON) option(PCL_OMP "With PCL OMP implementations" ON) FIND_PACKAGE(OpenCV REQUIRED QUIET) IF(WITH_QT) FIND_PACKAGE(PCL 1.7 REQUIRED QUIET COMPONENTS common io kdtree search surface filters registration sample_consensus segmentation visualization) ELSE() FIND_PACKAGE(PCL 1.7 REQUIRED QUIET COMPONENTS common io kdtree search surface filters registration sample_consensus segmentation ) ENDIF() FIND_PACKAGE(ZLIB REQUIRED QUIET) if(NOT "${PCL_LIBRARIES}" STREQUAL "") # fix libproj.so not found on Xenial list(REMOVE_ITEM PCL_LIBRARIES "vtkproj4") endif() # OpenMP ("-fopenmp" should be added for flann included in PCL) # the gcc-4.2.1 coming with MacOS X is not compatible with the OpenMP pragmas we use, so disabling OpenMP for it if((NOT APPLE) OR (NOT CMAKE_COMPILER_IS_GNUCXX) OR (GCC_VERSION VERSION_GREATER 4.2.1) OR (CMAKE_CXX_COMPILER_ID STREQUAL "Clang")) find_package(OpenMP) endif() if(OPENMP_FOUND) set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}") message (STATUS "Found OpenMP") if(PCL_OMP) add_definitions(-DPCL_OMP) endif(PCL_OMP) else(OPENMP_FOUND) message (STATUS "Not found OpenMP") endif() IF(OpenCV_FOUND) MESSAGE(STATUS "Found OpenCV: ${OpenCV_INCLUDE_DIRS}") ENDIF(OpenCV_FOUND) IF(PCL_FOUND) MESSAGE(STATUS "Found PCL: ${PCL_INCLUDE_DIRS}") ENDIF(PCL_FOUND) IF(ZLIB_FOUND) MESSAGE(STATUS "Found ZLIB: ${ZLIB_INCLUDE_DIRS}") ENDIF(ZLIB_FOUND) SET(ADD_VTK_GUI_SUPPORT_QT_TO_CONF FALSE) IF(WITH_QT) FIND_PACKAGE(VTK) IF(NOT VTK_FOUND) MESSAGE(FATAL_ERROR "VTK is required when using Qt. Set -DWITH_QT=OFF if you don't want gui tools.") ENDIF(NOT VTK_FOUND) # If Qt is here, the GUI will be built # look for Qt5 (if vtk>5 is installed) before Qt4 IF("${VTK_MAJOR_VERSION}" GREATER 5) FIND_PACKAGE(Qt5 COMPONENTS Widgets Core Gui QUIET) IF(Qt5_FOUND) FIND_PACKAGE(Qt5 COMPONENTS Widgets Core Gui OPTIONAL_COMPONENTS Svg) ENDIF(Qt5_FOUND) ENDIF("${VTK_MAJOR_VERSION}" GREATER 5) IF(NOT Qt5_FOUND) FIND_PACKAGE(Qt4 COMPONENTS QtCore QtGui OPTIONAL_COMPONENTS QtSvg) ENDIF(NOT Qt5_FOUND) IF(QT4_FOUND OR Qt5_FOUND) IF("${VTK_MAJOR_VERSION}" EQUAL 5) FIND_PACKAGE(QVTK REQUIRED) # only for VTK 5 ELSE() list(FIND PCL_LIBRARIES vtkGUISupportQt value) IF(value EQUAL -1) SET(PCL_LIBRARIES "${PCL_LIBRARIES};vtkGUISupportQt") SET(ADD_VTK_GUI_SUPPORT_QT_TO_CONF TRUE) ENDIF(value EQUAL -1) ENDIF() ENDIF(QT4_FOUND OR Qt5_FOUND) ENDIF(WITH_QT) IF(WITH_FREENECT) FIND_PACKAGE(Freenect QUIET) IF(Freenect_FOUND) MESSAGE(STATUS "Found Freenect: ${Freenect_INCLUDE_DIRS}") ENDIF(Freenect_FOUND) ENDIF(WITH_FREENECT) IF(WITH_FREENECT2) FIND_PACKAGE(freenect2 QUIET) IF(freenect2_FOUND) IF(NOT freenect2_INCLUDE_DIRS) SET(freenect2_INCLUDE_DIRS ${freenect2_INCLUDE_DIR}) ENDIF(NOT freenect2_INCLUDE_DIRS) MESSAGE(STATUS "Found freenect2: ${freenect2_INCLUDE_DIRS}") # Explicitly link to OpenCL (in case of CUDA installed) FIND_PACKAGE(OpenCL QUIET) IF(OpenCL_FOUND) SET(freenect2_LIBRARIES ${OpenCL_LIBRARIES} ${freenect2_LIBRARIES} ) ENDIF(OpenCL_FOUND) ENDIF(freenect2_FOUND) ENDIF(WITH_FREENECT2) IF(WITH_K4W2) FIND_PACKAGE(KinectSDK2 QUIET) IF(KinectSDK2_FOUND) MESSAGE(STATUS "Found Kinect for Windows 2: ${KinectSDK2_INCLUDE_DIRS}") ENDIF(KinectSDK2_FOUND) ENDIF(WITH_K4W2) # IF PCL depends on OpenNI2 (already found), ignore WITH_OPENNI2 IF(WITH_OPENNI2 OR OpenNI2_FOUND) FIND_PACKAGE(OpenNI2 QUIET) IF(OpenNI2_FOUND) MESSAGE(STATUS "Found OpenNI2: ${OpenNI2_INCLUDE_DIRS}") ENDIF(OpenNI2_FOUND) ENDIF(WITH_OPENNI2 OR OpenNI2_FOUND) IF(WITH_DC1394) FIND_PACKAGE(DC1394 QUIET) IF(DC1394_FOUND) MESSAGE(STATUS "Found DC1394: ${DC1394_INCLUDE_DIRS}") ENDIF(DC1394_FOUND) ENDIF(WITH_DC1394) IF(WITH_G2O) FIND_PACKAGE(G2O QUIET) IF(G2O_FOUND) MESSAGE(STATUS "Found g2o: ${G2O_INCLUDE_DIRS}") ENDIF(G2O_FOUND) ENDIF(WITH_G2O) IF(WITH_GTSAM) FIND_PACKAGE(GTSAM QUIET) ENDIF(WITH_GTSAM) IF(WITH_FLYCAPTURE2) FIND_PACKAGE(FlyCapture2 QUIET) IF(FlyCapture2_FOUND) MESSAGE(STATUS "Found FlyCapture2: ${FlyCapture2_INCLUDE_DIRS}") ENDIF(FlyCapture2_FOUND) ENDIF(WITH_FLYCAPTURE2) IF(WITH_CVSBA) FIND_PACKAGE(cvsba QUIET) IF(cvsba_FOUND) MESSAGE(STATUS "Found cvsba: ${cvsba_INCLUDE_DIRS}") ENDIF(cvsba_FOUND) ENDIF(WITH_CVSBA) IF(WITH_POINTMATCHER) find_package(libpointmatcher QUIET) IF(libpointmatcher_FOUND) MESSAGE(STATUS "Found libpointmatcher: ${libpointmatcher_INCLUDE_DIRS}") ENDIF(libpointmatcher_FOUND) ENDIF(WITH_POINTMATCHER) IF(WITH_ZED) IF(WIN32) # Windows SET(ZED_INCLUDE_DIRS $ENV{ZED_INCLUDE_DIRS}) if (CMAKE_CL_64) # 64 bits SET(ZED_LIBRARIES $ENV{ZED_LIBRARIES_64}) else(CMAKE_CL_64) # 32 bits message("32bits compilation is no more available with CUDA7.0") endif(CMAKE_CL_64) SET(ZED_LIBRARY_DIR $ENV{ZED_LIBRARY_DIR}) IF(ZED_LIBRARIES AND ZED_INCLUDE_DIRS) SET(ZED_FOUND TRUE) LINK_DIRECTORIES( ${LINK_DIRECTORIES} ${ZED_LIBRARY_DIR}) ENDIF(ZED_LIBRARIES AND ZED_INCLUDE_DIRS) ELSE() # Linux find_package(ZED 2 QUIET) ENDIF(WIN32) IF(ZED_FOUND) MESSAGE(STATUS "Found ZED sdk: ${ZED_INCLUDE_DIRS}") ## look for CUDA find_package(CUDA) IF(CUDA_FOUND) MESSAGE(STATUS "Found CUDA: ${CUDA_INCLUDE_DIRS}") ELSE() MESSAGE(FATAL_ERROR "CUDA is required to build with Zed sdk! Set -DWITH_ZED=OFF if you don't have CUDA.") ENDIF() ENDIF(ZED_FOUND) ENDIF(WITH_ZED) IF(WITH_REALSENSE) IF(WITH_REALSENSE_SLAM) FIND_PACKAGE(RealSense QUIET COMPONENTS slam) ELSE() FIND_PACKAGE(RealSense QUIET) ENDIF() IF(RealSense_FOUND) MESSAGE(STATUS "Found RealSense: ${RealSense_INCLUDE_DIRS}") ENDIF(RealSense_FOUND) IF(RealSenseSlam_FOUND) MESSAGE(STATUS "Found RealSenseSlam: ${RealSense_INCLUDE_DIRS}") ENDIF(RealSenseSlam_FOUND) ENDIF(WITH_REALSENSE) IF(WITH_OCTOMAP) FIND_PACKAGE(OCTOMAP QUIET) IF(OCTOMAP_FOUND) MESSAGE(STATUS "Found octomap: ${OCTOMAP_INCLUDE_DIRS}") ENDIF(OCTOMAP_FOUND) ENDIF(WITH_OCTOMAP) IF(WITH_CPUTSDF) FIND_PACKAGE(CPUTSDF QUIET) IF(CPUTSDF_FOUND) MESSAGE(STATUS "Found CPUTSDF: ${CPUTSDF_INCLUDE_DIRS}") ENDIF(CPUTSDF_FOUND) ENDIF(WITH_CPUTSDF) IF(WITH_FOVIS) FIND_PACKAGE(libfovis QUIET) IF(libfovis_FOUND) MESSAGE(STATUS "Found libfovis: ${libfovis_INCLUDE_DIRS}") ENDIF(libfovis_FOUND) ENDIF(WITH_FOVIS) IF(WITH_VISO2) FIND_PACKAGE(libviso2 QUIET) IF(libviso2_FOUND) MESSAGE(STATUS "Found libviso2: ${libviso2_INCLUDE_DIRS}") ENDIF(libviso2_FOUND) ENDIF(WITH_VISO2) IF(WITH_DVO) FIND_PACKAGE(dvo_core QUIET) IF(dvo_core_FOUND) MESSAGE(STATUS "Found dvo_core: ${dvo_core_INCLUDE_DIRS}") ENDIF(dvo_core_FOUND) ENDIF(WITH_DVO) IF(WITH_ORB_SLAM2 AND NOT G2O_FOUND) FIND_PACKAGE(ORB_SLAM2 QUIET) IF(ORB_SLAM2_FOUND) MESSAGE(STATUS "Found ORB_SLAM2: ${ORB_SLAM2_INCLUDE_DIRS}") FIND_PACKAGE(Pangolin QUIET) IF(NOT Pangolin_FOUND) SET(ORB_SLAM2_FOUND FALSE) MESSAGE(STATUS "Found ORB_SLAM2 but not Pangolin, disabling ORB_SLAM2.") ELSE() MESSAGE(STATUS "Found Pangolin: ${Pangolin_INCLUDE_DIRS}") SET(ORB_SLAM2_INCLUDE_DIRS ${ORB_SLAM2_INCLUDE_DIRS} ${Pangolin_INCLUDE_DIRS}) SET(ORB_SLAM2_LIBRARIES ${ORB_SLAM2_LIBRARIES} ${Pangolin_LIBRARIES}) MESSAGE(WARNING "Don't forget to build ORB_SLAM2 (and included g2o) without \"-march=native\" to avoid crash when ORB_SLAM2 starts.") ENDIF() ENDIF(ORB_SLAM2_FOUND) ENDIF(WITH_ORB_SLAM2 AND NOT G2O_FOUND) IF(G2O_FOUND OR GTSAM_FOUND OR ZED_FOUND OR ANDROID OR RealSense_FOUND OR ORB_SLAM2_FOUND) #Newest versions require std11 IF(NOT MSVC) include(CheckCXXCompilerFlag) CHECK_CXX_COMPILER_FLAG("-std=c++11" COMPILER_SUPPORTS_CXX11) CHECK_CXX_COMPILER_FLAG("-std=c++0x" COMPILER_SUPPORTS_CXX0X) IF(COMPILER_SUPPORTS_CXX11) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") ELSEIF(COMPILER_SUPPORTS_CXX0X) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x") ELSE() message(STATUS "The compiler ${CMAKE_CXX_COMPILER} has no C++11 support. Please use a different C++ compiler if you want to use g2o or gtsam (set \"-DWITH_G2O=OFF -DWITH_GTSAM=OFF\" to build without g2o and gtsam).") ENDIF() ENDIF() ENDIF(G2O_FOUND OR GTSAM_FOUND OR ZED_FOUND OR ANDROID OR RealSense_FOUND OR ORB_SLAM2_FOUND) ####### OSX BUNDLE CMAKE_INSTALL_PREFIX ####### IF(APPLE AND BUILD_AS_BUNDLE) IF(Qt5_FOUND OR (QT4_FOUND AND QT_QTCORE_FOUND AND QT_QTGUI_FOUND)) # Required when packaging, and set CMAKE_INSTALL_PREFIX to "/". SET(CMAKE_INSTALL_PREFIX "/") SET(CPACK_SET_DESTDIR TRUE) SET(CMAKE_BUNDLE_NAME "${PROJECT_NAME}") SET(CMAKE_BUNDLE_LOCATION "${CMAKE_INSTALL_PREFIX}") # make sure CMAKE_INSTALL_PREFIX ends in / STRING(LENGTH "${CMAKE_INSTALL_PREFIX}" LEN) MATH(EXPR LEN "${LEN} -1" ) STRING(SUBSTRING "${CMAKE_INSTALL_PREFIX}" ${LEN} 1 ENDCH) IF(NOT "${ENDCH}" STREQUAL "/") SET(CMAKE_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}/") ENDIF(NOT "${ENDCH}" STREQUAL "/") SET(CMAKE_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}${CMAKE_BUNDLE_NAME}.app/Contents") ELSE() #If Qt is not here, no need to build a bundle SET(BUILD_AS_BUNDLE OFF) ENDIF() ENDIF(APPLE AND BUILD_AS_BUNDLE) ####### SOURCES (Projects) ####### # CONF_DEPENDENCIES contains only dependencies not required by the headers SET(CONF_DEPENDENCIES ${ZLIB_LIBRARIES} ) IF(NOT (OPENCV_NONFREE_FOUND OR OPENCV_XFEATURES2D_FOUND)) SET(NONFREE "//") ENDIF(NOT (OPENCV_NONFREE_FOUND OR OPENCV_XFEATURES2D_FOUND)) IF(NOT G2O_FOUND) SET(G2O "//") ELSE() SET(CONF_DEPENDENCIES ${CONF_DEPENDENCIES} ${G2O_LIBRARIES}) ENDIF() IF(NOT GTSAM_FOUND) SET(GTSAM "//") ELSE() SET(CONF_DEPENDENCIES ${CONF_DEPENDENCIES} ${GTSAM_LIBRARIES}) ENDIF() IF(NOT WITH_TORO) SET(TORO "//") ENDIF(NOT WITH_TORO) IF(NOT WITH_VERTIGO) SET(VERTIGO "//") ENDIF(NOT WITH_VERTIGO) IF(NOT cvsba_FOUND) SET(CVSBA "//") ELSE() SET(CONF_DEPENDENCIES ${CONF_DEPENDENCIES} ${cvsba_LIBRARIES}) ENDIF() IF(NOT libpointmatcher_FOUND) SET(POINTMATCHER "//") ENDIF(NOT libpointmatcher_FOUND) IF(NOT Freenect_FOUND) SET(FREENECT "//") ELSE() SET(CONF_DEPENDENCIES ${CONF_DEPENDENCIES} ${Freenect_LIBRARIES}) ENDIF() IF(NOT freenect2_FOUND) SET(FREENECT2 "//") ELSE() SET(CONF_DEPENDENCIES ${CONF_DEPENDENCIES} ${freenect2_LIBRARIES}) ENDIF() IF(NOT KinectSDK2_FOUND) SET(K4W2 "//") ELSE() SET(CONF_DEPENDENCIES ${CONF_DEPENDENCIES} ${KinectSDK2_LIBRARIES}) ENDIF() IF(NOT OpenNI2_FOUND) SET(OPENNI2 "//") ELSE() SET(CONF_DEPENDENCIES ${CONF_DEPENDENCIES} ${OpenNI2_LIBRARIES}) ENDIF() IF(NOT DC1394_FOUND) SET(DC1394 "//") ELSE() SET(CONF_DEPENDENCIES ${CONF_DEPENDENCIES} ${DC1394_LIBRARIES}) ENDIF() IF(NOT FlyCapture2_FOUND) SET(FLYCAPTURE2 "//") ELSE() SET(CONF_DEPENDENCIES ${CONF_DEPENDENCIES} ${FlyCapture2_LIBRARIES}) ENDIF() IF(NOT ZED_FOUND) SET(ZED "//") ELSE() SET(CONF_DEPENDENCIES ${CONF_DEPENDENCIES} ${ZED_LIBRARIES} ${CUDA_LIBRARIES}) ENDIF() IF(NOT RealSense_FOUND) SET(REALSENSE "//") ELSE() SET(CONF_DEPENDENCIES ${CONF_DEPENDENCIES} ${RealSense_LIBRARIES}) ENDIF() IF(NOT RealSenseSlam_FOUND) SET(REALSENSESLAM "//") ENDIF(NOT RealSenseSlam_FOUND) IF(NOT OCTOMAP_FOUND) SET(OCTOMAP "//") ELSE() SET(CONF_DEPENDENCIES ${CONF_DEPENDENCIES} ${OCTOMAP_LIBRARIES}) ENDIF() IF(NOT CPUTSDF_FOUND) SET(CPUTSDF "//") ELSE() SET(CONF_DEPENDENCIES ${CONF_DEPENDENCIES} ${CPUTSDF_LIBRARIES}) ENDIF() IF(NOT libfovis_FOUND) SET(FOVIS "//") ELSE() SET(CONF_DEPENDENCIES ${CONF_DEPENDENCIES} ${libfovis_LIBRARIES}) ENDIF() IF(NOT libviso2_FOUND) SET(VISO2 "//") ELSE() SET(CONF_DEPENDENCIES ${CONF_DEPENDENCIES} ${libviso2_LIBRARIES}) ENDIF() IF(NOT dvo_core_FOUND) SET(DVO "//") ELSE() SET(CONF_DEPENDENCIES ${CONF_DEPENDENCIES} ${dvo_core_LIBRARIES}) ENDIF() IF(NOT ORB_SLAM2_FOUND) SET(ORB_SLAM2 "//") ELSE() SET(CONF_DEPENDENCIES ${CONF_DEPENDENCIES} ${ORB_SLAM2_LIBRARIES}) ENDIF() IF(ADD_VTK_GUI_SUPPORT_QT_TO_CONF) SET(CONF_VTK_QT true) SET(CONF_DEPENDENCIES ${CONF_DEPENDENCIES} vtkGUISupportQt) ELSE() SET(CONF_VTK_QT false) ENDIF() IF(VTK_USE_QVTK) SET(CONF_DEPENDENCIES ${CONF_DEPENDENCIES} ${QVTK_LIBRARY}) ENDIF(VTK_USE_QVTK) IF(NOT (OpenCV_FOUND AND OpenCV_VERSION_MAJOR EQUAL 3)) SET(OPENCV3 "//") ENDIF(NOT (OpenCV_FOUND AND OpenCV_VERSION_MAJOR EQUAL 3)) CONFIGURE_FILE(Version.h.in ${PROJECT_SOURCE_DIR}/corelib/include/${PROJECT_PREFIX}/core/Version.h) ADD_SUBDIRECTORY( utilite ) ADD_SUBDIRECTORY( corelib ) IF(ANDROID) IF(BUILD_APP) ADD_SUBDIRECTORY( app ) ENDIF(BUILD_APP) ELSEIF(Qt5_FOUND OR (QT4_FOUND AND QT_QTCORE_FOUND AND QT_QTGUI_FOUND)) ADD_SUBDIRECTORY( guilib ) IF(BUILD_APP) ADD_SUBDIRECTORY( app ) ENDIF(BUILD_APP) ELSEIF(WITH_QT) MESSAGE(WARNING "Qt not found, the GUI lib and the stand-alone application will not be compiled...") ENDIF() IF(BUILD_TOOLS) ADD_SUBDIRECTORY( tools ) ENDIF(BUILD_TOOLS) IF(BUILD_EXAMPLES) ADD_SUBDIRECTORY( examples ) ENDIF(BUILD_EXAMPLES) ####################### # Uninstall target, for "make uninstall" ####################### CONFIGURE_FILE( "${CMAKE_CURRENT_SOURCE_DIR}/cmake_uninstall.cmake.in" "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake" IMMEDIATE @ONLY) ADD_CUSTOM_TARGET(uninstall "${CMAKE_COMMAND}" -P "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake") #### # Setup RTABMapConfig.cmake #### # Create the RTABMapConfig.cmake and RTABMapConfigVersion files file(RELATIVE_PATH REL_INCLUDE_DIR "${CMAKE_INSTALL_PREFIX}/${INSTALL_CMAKE_DIR}" "${CMAKE_INSTALL_PREFIX}/${INSTALL_INCLUDE_DIR}") file(RELATIVE_PATH REL_LIB_DIR "${CMAKE_INSTALL_PREFIX}/${INSTALL_CMAKE_DIR}" "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}") # ... for the build tree set(CONF_INCLUDE_DIRS "${PROJECT_SOURCE_DIR}/corelib/include" "${PROJECT_SOURCE_DIR}/guilib/include" "${PROJECT_SOURCE_DIR}/utilite/include") set(CONF_LIB_DIR "${CMAKE_ARCHIVE_OUTPUT_DIRECTORY} ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}") IF(QT4_FOUND OR Qt5_FOUND) set(CONF_WITH_GUI ON) IF(QT4_FOUND) set(CONF_QT_VERSION 4) ELSE() set(CONF_QT_VERSION 5) ENDIF() ELSE() set(CONF_WITH_GUI OFF) ENDIF() configure_file(RTABMapConfig.cmake.in "${PROJECT_BINARY_DIR}/RTABMapConfig.cmake" @ONLY) # ... for the install tree set(CONF_INCLUDE_DIRS "\${RTABMap_CMAKE_DIR}/${REL_INCLUDE_DIR}") set(CONF_LIB_DIR "\${RTABMap_CMAKE_DIR}/${REL_LIB_DIR}") configure_file(RTABMapConfig.cmake.in "${PROJECT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/RTABMapConfig.cmake" @ONLY) # ... for both configure_file(RTABMapConfigVersion.cmake.in "${PROJECT_BINARY_DIR}/RTABMapConfigVersion.cmake" @ONLY) # Install the RTABMapConfig.cmake and RTABMapConfigVersion.cmake install(FILES "${PROJECT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/RTABMapConfig.cmake" "${PROJECT_BINARY_DIR}/RTABMapConfigVersion.cmake" DESTINATION "${INSTALL_CMAKE_DIR}" COMPONENT devel) #### ### Install package.xml for catkin install(FILES package.xml DESTINATION "${CMAKE_INSTALL_DATAROOTDIR}/${PROJECT_PREFIX}") ####################### # CPACK (Packaging) ####################### INCLUDE(InstallRequiredSystemLibraries) SET(CPACK_PACKAGE_NAME "${PROJECT_NAME}") SET(CPACK_PACKAGE_VENDOR "${PROJECT_NAME} project") SET(CPACK_PACKAGE_DESCRIPTION_SUMMARY "RTAB-MAP is a Real-Time Appearance-Based Mapping approach.") #SET(CPACK_PACKAGE_DESCRIPTION_FILE "${CMAKE_SOURCE_DIR}/Description.txt") #SET(CPACK_RESOURCE_FILE_README "${CMAKE_SOURCE_DIR}/README.txt") SET(CPACK_PACKAGE_VERSION_MAJOR "${PROJECT_VERSION_MAJOR}") SET(CPACK_PACKAGE_VERSION_MINOR "${PROJECT_VERSION_MINOR}") SET(CPACK_PACKAGE_VERSION_PATCH "${PROJECT_VERSION_PATCH}") #SET(CPACK_PACKAGE_INSTALL_DIRECTORY "${PROJECT_NAME}${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}") #SET(CPACK_PACKAGE_EXECUTABLES "") #SET(CPACK_SOURCE_PACKAGE_FILE_NAME "${PROJECT_NAME}-${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}.${CPACK_PACKAGE_VERSION_PATCH}") SET(CPACK_PACKAGE_CONTACT "matlabbe@gmail.com") set(CPACK_SOURCE_IGNORE_FILES "\\\\.svn/" "\\\\.settings/" "${PROJECT_SOURCE_DIR}/build/[a-zA-Z0-9_]+" "~$" "${PROJECT_SOURCE_DIR}/bin/.*${PROJECT_PREFIX}" "${PROJECT_SOURCE_DIR}/bin/.*${PROJECT_NAME}" "${PROJECT_SOURCE_DIR}/bin/.*[tT]est" "${PROJECT_SOURCE_DIR}/bin/.*[eE]xample" "${PROJECT_SOURCE_DIR}/bin/.*uresourcegenerator" "\\\\.DS_Store" ) IF(WIN32) SET(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_SOURCE_DIR}/LICENSE") IF(CMAKE_CL_64) SET(CPACK_NSIS_INSTALL_ROOT "$PROGRAMFILES64") ELSE() SET(CPACK_NSIS_INSTALL_ROOT "$PROGRAMFILES") ENDIF() SET(CPACK_GENERATOR "ZIP;NSIS") SET(CPACK_SOURCE_GENERATOR "ZIP") SET(CPACK_NSIS_PACKAGE_NAME "${PROJECT_NAME}") SET(ICON_PATH "${PROJECT_SOURCE_DIR}/app/src/${PROJECT_NAME}.ico") SET(CPACK_NSIS_MUI_ICON ${ICON_PATH}) SET(CPACK_NSIS_MUI_UNIICON ${ICON_PATH}) SET(CPACK_PACKAGE_INSTALL_DIRECTORY "${PROJECT_NAME}") #SET(CPACK_PACKAGE_ICON ${ICON_PATH}) #SET(CPACK_NSIS_INSTALLED_ICON_NAME ${ICON_PATH}) #SET(CPACK_NSIS_HELP_LINK "http:\\\\\\\\www.${PROJECT_PREFIX}.googlecode.com") #SET(CPACK_NSIS_URL_INFO_ABOUT "http:\\\\\\\\www.${PROJECT_PREFIX}.googlecode.com") SET(CPACK_NSIS_DISPLAY_NAME "${PROJECT_NAME}") SET(CPACK_NSIS_CONTACT ${CPACK_PACKAGE_CONTACT}) # Set the icon used for the Windows "Add or Remove Programs" tool. SET(CPACK_NSIS_INSTALLED_ICON_NAME bin\\\\${PROJECT_NAME}.exe) # Desktop link ("executableName" "linkName") SET(CPACK_PACKAGE_EXECUTABLES "${PROJECT_NAME}" "${PROJECT_NAME}" ${CPACK_PACKAGE_EXECUTABLES}) SET(CPACK_CREATE_DESKTOP_LINKS "${PROJECT_NAME}" ${CPACK_CREATE_DESKTOP_LINKS}) SET(CPACK_NSIS_MODIFY_PATH ON) ELSEIF(APPLE) # The project is created as a bundle over the main app (see ./app/src). # Here we package only this bundle. Note that we set # CMAKE_INSTALL_PREFIX to "/" when packaging... IF(BUILD_AS_BUNDLE) SET(CPACK_GENERATOR "DragNDrop") ELSE() SET(CPACK_GENERATOR "PackageMaker;TBZ2") ENDIF() SET(CPACK_SOURCE_GENERATOR "ZIP") SET(CPACK_PACKAGE_ICON "${PROJECT_SOURCE_DIR}/app/src/${PROJECT_NAME}.icns") ELSE() SET(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_SOURCE_DIR}/LICENSE") SET(CPACK_GENERATOR "TBZ2") SET(CPACK_SOURCE_GENERATOR "ZIP") ENDIF() INCLUDE(CPack) MESSAGE(STATUS "--------------------------------------------") MESSAGE(STATUS "Info :") MESSAGE(STATUS " Version : ${RTABMAP_VERSION}") MESSAGE(STATUS " CMAKE_INSTALL_PREFIX = ${CMAKE_INSTALL_PREFIX}") MESSAGE(STATUS " CMAKE_BUILD_TYPE = ${CMAKE_BUILD_TYPE}") MESSAGE(STATUS " CMAKE_INSTALL_LIBDIR = ${CMAKE_INSTALL_LIBDIR}") MESSAGE(STATUS " BUILD_APP = ${BUILD_APP}") MESSAGE(STATUS " BUILD_TOOLS = ${BUILD_TOOLS}") MESSAGE(STATUS " BUILD_EXAMPLES = ${BUILD_EXAMPLES}") IF(NOT WIN32) # see comment above for the BUILD_SHARED_LIBS option on Windows MESSAGE(STATUS " BUILD_SHARED_LIBS = ${BUILD_SHARED_LIBS}") ENDIF(NOT WIN32) IF(APPLE) MESSAGE(STATUS " BUILD_AS_BUNDLE = ${BUILD_AS_BUNDLE}") ENDIF(APPLE) MESSAGE(STATUS " CMAKE_CXX_FLAGS = ${CMAKE_CXX_FLAGS}") IF(OpenCV_FOUND) IF(OpenCV_VERSION_MAJOR EQUAL 2) IF(OPENCV_NONFREE_FOUND) MESSAGE(STATUS " With OpenCV 2 nonfree module (SIFT/SURF) = YES (License: Non commercial)") ELSE() MESSAGE(STATUS " With OpenCV 2 nonfree module (SIFT/SURF) = NO (not found, License: BSD)") ENDIF() ELSE() IF(OPENCV_XFEATURES2D_FOUND) MESSAGE(STATUS " With OpenCV 3 xfeatures2d module (SIFT/SURF/BRIEF/FREAK) = YES (License: Non commercial)") ELSE() MESSAGE(STATUS " With OpenCV 3 xfeatures2d module (SIFT/SURF/BRIEF/FREAK) = NO (not found, License: BSD)") ENDIF() ENDIF() ENDIF(OpenCV_FOUND) IF(Freenect_FOUND) MESSAGE(STATUS " With Freenect = YES (License: Apache v2 and/or GPLv2)") ELSEIF(NOT WITH_FREENECT) MESSAGE(STATUS " With Freenect = NO (WITH_FREENECT=OFF)") ELSE() MESSAGE(STATUS " With Freenect = NO (libfreenect not found)") ENDIF() IF(OpenNI2_FOUND) MESSAGE(STATUS " With OpenNI2 = YES (License: Apache v2)") ELSEIF(NOT WITH_OPENNI2) MESSAGE(STATUS " With OpenNI2 = NO (WITH_OPENNI2=OFF)") ELSE() MESSAGE(STATUS " With OpenNI2 = NO (OpenNI2 not found)") ENDIF() IF(freenect2_FOUND) MESSAGE(STATUS " With Freenect2 = YES (License: Apache v2 and/or GPLv2)") ELSEIF(NOT WITH_FREENECT2) MESSAGE(STATUS " With Freenect2 = NO (WITH_FREENECT2=OFF)") ELSE() MESSAGE(STATUS " With Freenect2 = NO (libfreenect2 not found)") ENDIF() IF(KinectSDK2_FOUND) MESSAGE(STATUS " With Kinect for Windows 2 = YES (License: Apache v2 and/or GPLv2)") ELSEIF(NOT WITH_K4W2) MESSAGE(STATUS " With Kinect for Windows 2 = NO (WITH_K4W2=OFF)") ELSE() MESSAGE(STATUS " With Kinect for Windows 2 = NO (Kinect for Windows 2 SDK not found)") ENDIF() IF(DC1394_FOUND) MESSAGE(STATUS " With dc1394 = YES (License: LGPL)") ELSEIF(NOT WITH_DC1394) MESSAGE(STATUS " With dc1394 = NO (WITH_DC1394=OFF)") ELSE() MESSAGE(STATUS " With dc1394 = NO (dc1394 not found)") ENDIF() IF(FlyCapture2_FOUND) MESSAGE(STATUS " With FlyCapture2/Triclops = YES") ELSEIF(NOT WITH_FLYCAPTURE2) MESSAGE(STATUS " With FlyCapture2/Triclops = NO (WITH_FLYCAPTURE2=OFF)") ELSE() MESSAGE(STATUS " With FlyCapture2/Triclops = NO (Point Grey SDK not found)") ENDIF() IF(WITH_TORO) MESSAGE(STATUS " With TORO = YES (License: Creative Commons [Attribution-NonCommercial-ShareAlike])") ELSE() MESSAGE(STATUS " With TORO = NO (WITH_TORO=OFF)") ENDIF() IF(G2O_FOUND) MESSAGE(STATUS " With g2o = YES (License: BSD)") ELSEIF(NOT WITH_G2O) MESSAGE(STATUS " With g2o = NO (WITH_G2O=OFF)") ELSE() MESSAGE(STATUS " With g2o = NO (g2o not found)") ENDIF() IF(GTSAM_FOUND) MESSAGE(STATUS " With GTSAM = YES (License: BSD)") ELSEIF(NOT WITH_GTSAM) MESSAGE(STATUS " With GTSAM = NO (WITH_GTSAM=OFF)") ELSE() MESSAGE(STATUS " With GTSAM = NO (GTSAM not found)") ENDIF() IF(G2O_FOUND OR GTSAM_FOUND) IF(WITH_VERTIGO) MESSAGE(STATUS " With VERTIGO = YES (License: GPLv3)") ELSE() MESSAGE(STATUS " With VERTIGO = NO (WITH_VERTIGO=OFF)") ENDIF() ELSE() MESSAGE(STATUS " With VERTIGO = NO (GTSAM or g2o required)") ENDIF() IF(cvsba_FOUND) MESSAGE(STATUS " With cvsba = YES (License: GPLv2)") ELSEIF(NOT WITH_CVSBA) MESSAGE(STATUS " With cvsba = NO (WITH_CVSBA=OFF)") ELSE() MESSAGE(STATUS " With cvsba = NO (cvsba not found)") ENDIF() IF(libpointmatcher_FOUND) MESSAGE(STATUS " With libpointmatcher = YES (License: BSD)") ELSEIF(NOT WITH_POINTMATCHER) MESSAGE(STATUS " With libpointmatcher = NO (WITH_POINTMATCHER=OFF)") ELSE() MESSAGE(STATUS " With libpointmatcher = NO (libpointmatcher not found)") ENDIF() IF(ZED_FOUND) IF(CUDA_FOUND) MESSAGE(STATUS " With ZED = YES (With CUDA)") ELSE() MESSAGE(STATUS " With ZED = YES (Without CUDA)") ENDIF() ELSEIF(NOT WITH_ZED) MESSAGE(STATUS " With ZED = NO (WITH_ZED=OFF)") ELSE() MESSAGE(STATUS " With ZED = NO (ZED sdk not found)") ENDIF() IF(RealSense_FOUND) MESSAGE(STATUS " With RealSense = YES (License: Apache-2)") IF(RealSenseSlam_FOUND) MESSAGE(STATUS " With RealSenseSlam = YES") ELSEIF(NOT WITH_REALSENSE) MESSAGE(STATUS " With RealSenseSlam = NO (librealsense_slam not found)") ELSE() MESSAGE(STATUS " With RealSenseSlam = NO (WITH_REALSENSE_SLAM=OFF)") ENDIF() ELSEIF(NOT WITH_REALSENSE) MESSAGE(STATUS " With RealSense = NO (WITH_REALSENSE=OFF)") ELSE() MESSAGE(STATUS " With RealSense = NO (librealsense not found)") ENDIF() IF(OCTOMAP_FOUND) MESSAGE(STATUS " With OCTOMAP = YES (License: BSD)") ELSEIF(NOT WITH_OCTOMAP) MESSAGE(STATUS " With OCTOMAP = NO (WITH_OCTOMAP=OFF)") ELSE() MESSAGE(STATUS " With OCTOMAP = NO (octomap not found)") ENDIF() IF(CPUTSDF_FOUND) MESSAGE(STATUS " With CPUTSDF = YES (License: BSD)") ELSEIF(NOT WITH_CPUTSDF) MESSAGE(STATUS " With CPUTSDF = NO (WITH_CPUTSDF=OFF)") ELSE() MESSAGE(STATUS " With CPUTSDF = NO (CPUTSDF not found)") ENDIF() IF(libfovis_FOUND) MESSAGE(STATUS " With libfovis = YES (License: GPLv2)") ELSEIF(NOT WITH_FOVIS) MESSAGE(STATUS " With libfovis = NO (WITH_FOVIS=OFF)") ELSE() MESSAGE(STATUS " With libfovis = NO (libfovis not found)") ENDIF() IF(libviso2_FOUND) MESSAGE(STATUS " With libviso2 = YES (License: GPLv3)") ELSEIF(NOT WITH_VISO2) MESSAGE(STATUS " With libviso2 = NO (WITH_VISO2=OFF)") ELSE() MESSAGE(STATUS " With libviso2 = NO (libviso2 not found)") ENDIF() IF(dvo_core_FOUND) MESSAGE(STATUS " With dvo_core = YES (License: GPLv3)") ELSEIF(NOT WITH_DVO) MESSAGE(STATUS " With dvo_core = NO (WITH_DVO=OFF)") ELSE() MESSAGE(STATUS " With dvo_core = NO (dvo_core not found)") ENDIF() IF(ORB_SLAM2_FOUND) MESSAGE(STATUS " With ORB_SLAM2 = YES (License: GPLv3)") ELSEIF(NOT WITH_ORB_SLAM2) MESSAGE(STATUS " With ORB_SLAM2 = NO (WITH_ORB_SLAM2=OFF)") ELSEIF(G2O_FOUND) MESSAGE(STATUS " With ORB_SLAM2 = NO (WITH_G2O should be OFF as ORB_SLAM2 uses its own g2o version)") ELSE() MESSAGE(STATUS " With ORB_SLAM2 = NO (ORB_SLAM2 not found, make sure environment variable ORB_SLAM2_ROOT_DIR is set)") ENDIF() IF(QT4_FOUND) MESSAGE(STATUS " With Qt4 = YES (License: Open Source or Commercial)") ELSEIF(Qt5_FOUND) MESSAGE(STATUS " With Qt5 = YES (License: Open Source or Commercial)") ELSEIF(NOT WITH_QT) MESSAGE(STATUS " With Qt = NO (WITH_QT=OFF)") ELSE() MESSAGE(STATUS " With Qt = NO (Qt not found)") ENDIF() MESSAGE(STATUS "--------------------------------------------") IF(NOT GTSAM_FOUND AND NOT G2O_FOUND AND NOT WITH_TORO) MESSAGE(SEND_ERROR "No graph optimizer found! You should have at least one of these options: g2o (https://github.com/RainerKuemmerle/g2o) GTSAM (https://collab.cc.gatech.edu/borg/gtsam) set -DWITH_TORO=ON") ENDIF(NOT GTSAM_FOUND AND NOT G2O_FOUND AND NOT WITH_TORO) # vim: set et ft=cmake fenc=utf-8 ff=unix sts=0 sw=2 ts=2 :