# CMakeLists.txt - cpp_robot_tf2 包构建配置 # # 设计思想: # - JointStatePublisher + Tf2Listener 都是独立可执行(节点即进程) # - 库 + 可执行分离(便于测试只链接库) # - 显式声明每个 ament 依赖(不靠 ros2_defaults) cmake_minimum_required(VERSION 3.16) project(cpp_robot_tf2 LANGUAGES CXX) if(NOT CMAKE_CXX_STANDARD) set(CMAKE_CXX_STANDARD 17) endif() if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang") add_compile_options(-Wall -Wextra -Wpedantic) endif() # 必备: 找 ament_cmake + 依赖 find_package(ament_cmake REQUIRED) find_package(rclcpp REQUIRED) find_package(sensor_msgs REQUIRED) find_package(geometry_msgs REQUIRED) find_package(tf2_ros REQUIRED) find_package(tf2 REQUIRED) find_package(tf2_geometry_msgs REQUIRED) set(THIS_PACKAGE_INCLUDE_DEPENDS rclcpp sensor_msgs geometry_msgs tf2_ros tf2 tf2_geometry_msgs ) # 库(只含类实现,不含 main) add_library(${PROJECT_NAME}_core SHARED src/joint_state_publisher.cpp src/tf2_listener.cpp ) target_include_directories(${PROJECT_NAME}_core PUBLIC $ $ ) ament_target_dependencies(${PROJECT_NAME}_core ${THIS_PACKAGE_INCLUDE_DEPENDS}) # 可执行(main 单独文件) add_executable(joint_state_publisher_cpp src/joint_state_publisher_main.cpp) target_link_libraries(joint_state_publisher_cpp ${PROJECT_NAME}_core) add_executable(tf2_listener_cpp src/tf2_listener_main.cpp) target_link_libraries(tf2_listener_cpp ${PROJECT_NAME}_core) # 安装 install(TARGETS joint_state_publisher_cpp tf2_listener_cpp ${PROJECT_NAME}_core DESTINATION lib/${PROJECT_NAME} ) install(DIRECTORY launch urdf DESTINATION share/${PROJECT_NAME} ) if(BUILD_TESTING) find_package(ament_cmake_gtest REQUIRED) ament_add_gtest(test_tf2_lookup test/test_tf2_lookup.cpp) ament_target_dependencies(test_tf2_lookup rclcpp ${THIS_PACKAGE_INCLUDE_DEPENDS}) target_link_libraries(test_tf2_lookup ${PROJECT_NAME}_core) endif() ament_package()