feat(level1): ROS2 完全体 12 包 / 80 测试 / 23 文档 / 工程化 / Docker 分组
This commit is contained in:
@@ -1,5 +1,17 @@
|
||||
# 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 VERSION 0.1.0)
|
||||
project(cpp_pubsub LANGUAGES CXX)
|
||||
|
||||
if(NOT CMAKE_CXX_STANDARD)
|
||||
set(CMAKE_CXX_STANDARD 17)
|
||||
@@ -9,36 +21,39 @@ if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang")
|
||||
add_compile_options(-Wall -Wextra -Wpedantic)
|
||||
endif()
|
||||
|
||||
find_package(ament_cmake REQUIRED)
|
||||
find_package(rclcpp REQUIRED)
|
||||
find_package(std_msgs REQUIRED)
|
||||
set(THIS_PACKAGE_INCLUDE_DEPENDS
|
||||
rclcpp
|
||||
std_msgs
|
||||
)
|
||||
|
||||
include_directories(include)
|
||||
# 库:含 ChatterPublisher / ChatterSubscriber 实现
|
||||
add_library(${PROJECT_NAME}_core SHARED
|
||||
src/chatter_publisher.cpp
|
||||
src/chatter_subscriber.cpp
|
||||
)
|
||||
target_include_directories(${PROJECT_NAME}_core PUBLIC
|
||||
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
|
||||
$<INSTALL_INTERFACE:include/${PROJECT_NAME}>
|
||||
)
|
||||
ament_target_dependencies(${PROJECT_NAME}_core ${THIS_PACKAGE_INCLUDE_DEPENDS})
|
||||
|
||||
add_executable(talker src/publisher_member_function.cpp)
|
||||
ament_target_dependencies(talker rclcpp std_msgs)
|
||||
# 可执行文件:两个独立 main(每个节点独立可执行)
|
||||
add_executable(chatter_publisher_cpp src/chatter_publisher.cpp)
|
||||
target_link_libraries(chatter_publisher_cpp ${PROJECT_NAME}_core)
|
||||
|
||||
add_executable(listener src/subscriber_member_function.cpp)
|
||||
ament_target_dependencies(listener rclcpp std_msgs)
|
||||
add_executable(chatter_subscriber_cpp src/chatter_subscriber.cpp)
|
||||
target_link_libraries(chatter_subscriber_cpp ${PROJECT_NAME}_core)
|
||||
|
||||
# 安装:可执行 + 库 + launch
|
||||
install(TARGETS
|
||||
talker
|
||||
listener
|
||||
chatter_publisher_cpp
|
||||
chatter_subscriber_cpp
|
||||
${PROJECT_NAME}_core
|
||||
DESTINATION lib/${PROJECT_NAME}
|
||||
)
|
||||
|
||||
install(DIRECTORY launch
|
||||
DESTINATION share/${PROJECT_NAME}/
|
||||
DESTINATION share/${PROJECT_NAME}
|
||||
)
|
||||
|
||||
# ------------------------------------------------------------------
|
||||
# 测试:ament_cmake_gtest 集成 gtest,
|
||||
# colcon test --packages-select cpp_pubsub 时自动跑 test_pub_sub。
|
||||
# ------------------------------------------------------------------
|
||||
if(BUILD_TESTING)
|
||||
find_package(ament_cmake_gtest REQUIRED)
|
||||
ament_add_gtest(test_pub_sub test/test_pub_sub.cpp)
|
||||
ament_target_dependencies(test_pub_sub rclcpp std_msgs)
|
||||
endif()
|
||||
|
||||
ament_package()
|
||||
Reference in New Issue
Block a user