diff --git a/CMakeLists.txt b/CMakeLists.txt index f16d735..1eb6073 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,4 +1,18 @@ cmake_minimum_required(VERSION 3.10) + +# ======================================================== +# Dual-mode CMakeLists.txt: Supports both Catkin and Standalone CMake +# ======================================================== + +# Detect if building with Catkin +if(DEFINED CATKIN_DEVEL_PREFIX OR DEFINED CATKIN_TOPLEVEL) + set(BUILDING_WITH_CATKIN TRUE) + message(STATUS "Building robot_laser_geometry with Catkin") +else() + set(BUILDING_WITH_CATKIN FALSE) + message(STATUS "Building robot_laser_geometry with Standalone CMake") +endif() + project(robot_laser_geometry) set(CMAKE_CXX_STANDARD 17) @@ -6,10 +20,37 @@ set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_POSITION_INDEPENDENT_CODE ON) include(CTest) +# ======================================================== # Find dependencies +# ======================================================== + +# Find system dependencies find_package(Eigen3 REQUIRED) find_package(GTest REQUIRED) +if(BUILDING_WITH_CATKIN) + find_package(catkin REQUIRED COMPONENTS + robot_sensor_msgs + geometry_msgs + robot_time + tf3 + data_convert + ) +endif() + +# ======================================================== +# Catkin specific configuration +# ======================================================== + +if(BUILDING_WITH_CATKIN) + catkin_package( + INCLUDE_DIRS include + LIBRARIES robot_laser_geometry + CATKIN_DEPENDS robot_sensor_msgs geometry_msgs robot_time tf3 data_convert + DEPENDS Eigen3 + ) +endif() + # Include directories include_directories( include @@ -17,6 +58,10 @@ include_directories( ${GTEST_INCLUDE_DIRS} ) +if(BUILDING_WITH_CATKIN) + include_directories(${catkin_INCLUDE_DIRS}) +endif() + # Create library add_library(robot_laser_geometry SHARED src/laser_geometry.cpp) @@ -26,13 +71,24 @@ target_include_directories(robot_laser_geometry $ ) -target_link_libraries(robot_laser_geometry PUBLIC - robot_sensor_msgs - geometry_msgs - robot_time - tf3 - data_convert -) +# Link libraries +if(BUILDING_WITH_CATKIN) + target_link_libraries(robot_laser_geometry PUBLIC + ${catkin_LIBRARIES} + ) +else() + target_link_libraries(robot_laser_geometry PUBLIC + robot_sensor_msgs + geometry_msgs + robot_time + tf3 + data_convert + ) +endif() + +if(BUILDING_WITH_CATKIN) + add_dependencies(robot_laser_geometry ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS}) +endif() if(TARGET Eigen3::Eigen) target_link_libraries(robot_laser_geometry PUBLIC Eigen3::Eigen) @@ -44,6 +100,10 @@ endif() # which is appropriate when building the dll but not consuming it. target_compile_definitions(robot_laser_geometry PRIVATE "ROBOT_LASER_GEOMETRY_BUILDING_LIBRARY") +# ======================================================== +# Installation +# ======================================================== + # --- Cài đặt thư viện vào hệ thống khi chạy make install --- install(TARGETS robot_laser_geometry EXPORT robot_laser_geometry-targets @@ -53,10 +113,13 @@ install(TARGETS robot_laser_geometry INCLUDES DESTINATION include # Cài đặt include ) -install( - DIRECTORY include/ - DESTINATION include/${PROJECT_NAME} -) +if(NOT BUILDING_WITH_CATKIN) + # Cài đặt headers (standalone) + install( + DIRECTORY include/ + DESTINATION include/${PROJECT_NAME} + ) +endif() # --- Xuất export set robot_laser_geometry-targets thành file CMake module --- # --- Tạo file lib/cmake/robot_laser_geometry/laser_geometry-targets.cmake --- diff --git a/package.xml b/package.xml index c7fe63b..b19e05f 100644 --- a/package.xml +++ b/package.xml @@ -19,8 +19,19 @@ catkin - libconsole-bridge-dev + robot_sensor_msgs + robot_sensor_msgs - libconsole-bridge-dev + geometry_msgs + geometry_msgs + + robot_time + robot_time + + tf3 + tf3 + + data_convert + data_convert \ No newline at end of file