Files
mission_adapters/CMakeLists.txt
2026-06-05 15:41:06 +07:00

265 lines
6.7 KiB
CMake

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
# $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
# $<INSTALL_INTERFACE:include>
# )
target_include_directories(${PROJECT_NAME}
PUBLIC
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
$<INSTALL_INTERFACE:include>
)
# 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
# $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
# $<INSTALL_INTERFACE:include>
# )
target_include_directories(${PROJECT_NAME}
PUBLIC
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
$<INSTALL_INTERFACE:include>
)
# 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()