# CMakeLists.txt - cpp_pubsub 包构建配置 # # 设计思想: # - 显式声明每个依赖(不靠 ros2_defaults 的隐式传递) # - 启用 -Wall -Wextra -Wpedantic(严格编译警告) # - 库 + 可执行文件分离(便于测试只链接库) # - 测试用 ament_add_gtest(集成 colcon test) # # 参考: # - ament_cmake 用户指南: https://docs.ros.org/en/humble/Concepts/About-Build-System.html # - ROS2 C++ Style: https://docs.ros.org/en/humble/Contributing/Code-Style-Language-Versions.html cmake_minimum_required(VERSION 3.16) project(cpp_pubsub 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() set(THIS_PACKAGE_INCLUDE_DEPENDS rclcpp std_msgs ) # 库:含 ChatterPublisher / ChatterSubscriber 实现 add_library(${PROJECT_NAME}_core SHARED src/chatter_publisher.cpp src/chatter_subscriber.cpp ) target_include_directories(${PROJECT_NAME}_core PUBLIC $ $ ) ament_target_dependencies(${PROJECT_NAME}_core ${THIS_PACKAGE_INCLUDE_DEPENDS}) # 可执行文件:两个独立 main(每个节点独立可执行) add_executable(chatter_publisher_cpp src/chatter_publisher.cpp) target_link_libraries(chatter_publisher_cpp ${PROJECT_NAME}_core) add_executable(chatter_subscriber_cpp src/chatter_subscriber.cpp) target_link_libraries(chatter_subscriber_cpp ${PROJECT_NAME}_core) # 安装:可执行 + 库 + launch install(TARGETS chatter_publisher_cpp chatter_subscriber_cpp ${PROJECT_NAME}_core DESTINATION lib/${PROJECT_NAME} ) install(DIRECTORY launch DESTINATION share/${PROJECT_NAME} ) ament_package()