cmake_minimum_required(VERSION 3.3) # Find ROS build system find_package(catkin QUIET COMPONENTS roscpp ov_core) # Describe ROS project option(ENABLE_ROS "Enable or disable building with ROS (if it is found)" ON) if (catkin_FOUND AND ENABLE_ROS) add_definitions(-DROS_AVAILABLE=1) catkin_package( CATKIN_DEPENDS roscpp cv_bridge ov_core INCLUDE_DIRS src/ LIBRARIES ov_init_lib ) else () add_definitions(-DROS_AVAILABLE=0) message(WARNING "BUILDING WITHOUT ROS!") include(GNUInstallDirs) set(CATKIN_PACKAGE_LIB_DESTINATION "${CMAKE_INSTALL_LIBDIR}") set(CATKIN_PACKAGE_BIN_DESTINATION "${CMAKE_INSTALL_BINDIR}") set(CATKIN_GLOBAL_INCLUDE_DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}") endif () # Include our header files include_directories( src ${EIGEN3_INCLUDE_DIR} ${Boost_INCLUDE_DIRS} ${CERES_INCLUDE_DIRS} ${catkin_INCLUDE_DIRS} ) # Set link libraries used by all binaries list(APPEND thirdparty_libraries ${Boost_LIBRARIES} ${OpenCV_LIBRARIES} ${CERES_LIBRARIES} ${catkin_LIBRARIES} ) # If we are not building with ROS then we need to manually link to its headers # This isn't that elegant of a way, but this at least allows for building without ROS # See this stackoverflow answer: https://stackoverflow.com/a/11217008/7718197 if (NOT catkin_FOUND OR NOT ENABLE_ROS) message(STATUS "MANUALLY LINKING TO OV_CORE LIBRARY....") include_directories(${CMAKE_SOURCE_DIR}/../ov_core/src/) file(GLOB_RECURSE OVCORE_LIBRARY_SOURCES "${CMAKE_SOURCE_DIR}/../ov_core/src/*.cpp") list(FILTER OVCORE_LIBRARY_SOURCES EXCLUDE REGEX ".*test_webcam\\.cpp$") list(FILTER OVCORE_LIBRARY_SOURCES EXCLUDE REGEX ".*test_tracking\\.cpp$") list(APPEND LIBRARY_SOURCES ${OVCORE_LIBRARY_SOURCES}) file(GLOB_RECURSE OVCORE_LIBRARY_HEADERS "${CMAKE_SOURCE_DIR}/../ov_core/src/*.h") list(APPEND LIBRARY_HEADERS ${OVCORE_LIBRARY_HEADERS}) endif () ################################################## # Make the shared library ################################################## list(APPEND LIBRARY_SOURCES src/dummy.cpp src/init/InertialInitializer.cpp src/dynamic/DynamicInitializer.cpp src/static/StaticInitializer.cpp src/sim/Simulator.cpp ) file(GLOB_RECURSE LIBRARY_HEADERS "src/*.h") add_library(ov_init_lib SHARED ${LIBRARY_SOURCES} ${LIBRARY_HEADERS}) target_link_libraries(ov_init_lib ${thirdparty_libraries}) target_include_directories(ov_init_lib PUBLIC src/) install(TARGETS ov_init_lib ARCHIVE DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION} LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION} RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION} ) install(DIRECTORY src/ DESTINATION ${CATKIN_GLOBAL_INCLUDE_DESTINATION} FILES_MATCHING PATTERN "*.h" PATTERN "*.hpp" ) ################################################## # Make binary files! ################################################## add_executable(test_simulation src/test_simulation.cpp) target_link_libraries(test_simulation ov_init_lib ${thirdparty_libraries}) install(TARGETS test_simulation ARCHIVE DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION} LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION} RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION} ) add_executable(test_dynamic_mle src/test_dynamic_mle.cpp) target_link_libraries(test_dynamic_mle ov_init_lib ${thirdparty_libraries}) install(TARGETS test_dynamic_mle ARCHIVE DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION} LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION} RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION} ) add_executable(test_dynamic_init src/test_dynamic_init.cpp) target_link_libraries(test_dynamic_init ov_init_lib ${thirdparty_libraries}) install(TARGETS test_dynamic_init ARCHIVE DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION} LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION} RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION} )