cmake_minimum_required(VERSION 3.0.2) project(mission_adapters VERSION 1.0.0 LANGUAGES CXX) # ======================================================== # Detect build mode # ======================================================== if(DEFINED CATKIN_DEVEL_PREFIX OR DEFINED CATKIN_TOPLEVEL) set(BUILDING_WITH_CATKIN TRUE) message(STATUS "Building mission_adapters with Catkin") else() set(BUILDING_WITH_CATKIN FALSE) message(STATUS "Building mission_adapters with Standalone CMake") endif() # ======================================================== # C++ Standard # ======================================================== set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_CXX_EXTENSIONS OFF) # ======================================================== # Common dependencies # ======================================================== find_package(PCL REQUIRED) find_package(OpenMP REQUIRED) find_package(Boost REQUIRED COMPONENTS system) find_package(Eigen REQUIRED) # ======================================================== # Standalone mode # ======================================================== if (NOT BUILDING_WITH_CATKIN) set(CMAKE_POSITION_INDEPENDENT_CODE ON) set(CMAKE_BUILD_RPATH_USE_ORIGIN TRUE) set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE) set(CMAKE_BUILD_RPATH "${CMAKE_BINARY_DIR}") # ⚠️ NOTE: Đây KHÔNG phải package thật -> chỉ để placeholder set(PACKAGES_DIR robot_costmap_2d robot_nav_core robot_nav_core2 robot_nav_msgs robot_std_msgs robot_geometry_msgs robot_cpp robot_tf3_geometry_msgs robot_visualization_msgs robot_nav_2d_utils data_convert ) find_library(TF3_LIBRARY NAMES tf3 PATHS /usr/lib /usr/local/lib /usr/lib/x86_64-linux-gnu ) if(NOT TF3_LIBRARY) message(FATAL_ERROR "❌ tf3 library not found") endif() # ======================================================== # Catkin mode # ======================================================== else() find_package(catkin REQUIRED COMPONENTS robot_costmap_2d robot_nav_core robot_nav_core2 robot_nav_msgs robot_std_msgs robot_geometry_msgs robot_cpp robot_tf3_geometry_msgs robot_visualization_msgs robot_nav_2d_utils data_convert ) find_library(TF3_LIBRARY NAMES tf3 PATHS /usr/lib /usr/local/lib /usr/lib/x86_64-linux-gnu ) if(NOT TF3_LIBRARY) message(FATAL_ERROR "❌ tf3 library not found") endif() catkin_package( INCLUDE_DIRS include LIBRARIES ${PROJECT_NAME} ${PROJECT_NAME}_utils CATKIN_DEPENDS robot_costmap_2d robot_nav_core robot_nav_core2 robot_nav_msgs robot_std_msgs robot_geometry_msgs robot_cpp robot_tf3_geometry_msgs robot_visualization_msgs robot_nav_2d_utils data_convert DEPENDS PCL Boost Eigen ) include_directories( include ${catkin_INCLUDE_DIRS} ${PCL_INCLUDE_DIRS} ${Boost_INCLUDE_DIRS} ) endif() # ======================================================== # Libraries # ======================================================== # # utils lib # add_library(${PROJECT_NAME}_utils SHARED # src/angle_utils.cpp # src/config.cpp # ) # main planner lib add_library(${PROJECT_NAME} SHARED src/mission_adapters.cpp ) # ======================================================== # Catkin linking # ======================================================== if(BUILDING_WITH_CATKIN) # add_dependencies(${PROJECT_NAME}_utils ${catkin_EXPORTED_TARGETS}) add_dependencies(${PROJECT_NAME} ${catkin_EXPORTED_TARGETS}) # target_include_directories(${PROJECT_NAME}_utils # PUBLIC # $ # $ # ) target_include_directories(${PROJECT_NAME} PUBLIC $ $ ) # target_link_libraries(${PROJECT_NAME}_utils # PUBLIC ${catkin_LIBRARIES} # PRIVATE Boost::system # ${TF3_LIBRARY} # ) target_link_libraries(${PROJECT_NAME} # PUBLIC ${PROJECT_NAME}_utils PUBLIC ${catkin_LIBRARIES} PUBLIC ${PCL_LIBRARIES} PRIVATE Boost::system ${TF3_LIBRARY} OpenMP::OpenMP_CXX ) # ======================================================== # Standalone linking # ======================================================== else() # target_include_directories(${PROJECT_NAME}_utils # PUBLIC # $ # $ # ) target_include_directories(${PROJECT_NAME} PUBLIC $ $ ) # target_link_libraries(${PROJECT_NAME}_utils # PUBLIC ${PACKAGES_DIR} # ⚠️ placeholder # PRIVATE Boost::system # ${TF3_LIBRARY} # ) target_link_libraries(${PROJECT_NAME} # PUBLIC ${PROJECT_NAME}_utils PUBLIC ${PACKAGES_DIR} # ⚠️ placeholder PUBLIC ${PCL_LIBRARIES} PRIVATE Boost::system ${TF3_LIBRARY} OpenMP::OpenMP_CXX ) # set_target_properties(${PROJECT_NAME}_utils PROPERTIES # LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR} # BUILD_RPATH "${CMAKE_BINARY_DIR}" # INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib" # ) set_target_properties(${PROJECT_NAME} PROPERTIES LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR} BUILD_RPATH "${CMAKE_BINARY_DIR}" INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib" ) endif() # ======================================================== # Install # ======================================================== if(BUILDING_WITH_CATKIN) # install(TARGETS ${PROJECT_NAME} ${PROJECT_NAME}_utils # ARCHIVE DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION} # LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION} # RUNTIME DESTINATION ${CATKIN_GLOBAL_BIN_DESTINATION} # ) install(DIRECTORY include/${PROJECT_NAME}/ DESTINATION ${CATKIN_PACKAGE_INCLUDE_DESTINATION} FILES_MATCHING PATTERN "*.h" ) if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/plugins.xml) install(FILES plugins.xml DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION} ) endif() else() # install(TARGETS ${PROJECT_NAME} ${PROJECT_NAME}_utils # EXPORT ${PROJECT_NAME}-targets # ARCHIVE DESTINATION lib # LIBRARY DESTINATION lib # RUNTIME DESTINATION bin # ) install(EXPORT ${PROJECT_NAME}-targets FILE ${PROJECT_NAME}-targets.cmake NAMESPACE ${PROJECT_NAME}:: DESTINATION lib/cmake/${PROJECT_NAME} ) install(DIRECTORY include/${PROJECT_NAME}/ DESTINATION include FILES_MATCHING PATTERN "*.h" ) if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/plugins.xml) install(FILES plugins.xml DESTINATION share/${PROJECT_NAME} ) endif() endif()