没有 colcon 构建的 ROS2 节点

问题描述 投票:0回答:1

我想在另一个无法使用 Colcon 构建的应用程序中运行 ros2 Windows 节点。

是否可以仅使用对库和头文件的引用来开发 ROS2 节点,而无需 colcon 构建过程?

非常感谢在这方面的任何帮助。

c++ windows ros2
1个回答
0
投票

这是使用普通 CMake 的答案。您将在下面找到我在容器化环境(即具有固定安装路径)中使用 ROS2 Jazzy 提出的相应 CMakeLists.txt。

请注意,此解决方案仅涵盖构建和执行主题。这里不考虑 ROS2 构建系统涵盖的其他主题(例如包依赖、消息生成)。

CMake 文件示例性地提供了

std_msgs
。我的演讲者示例通过使用
target_link_libraries(talker rclcpp std_msgs)
构建并运行良好。

cmake_minimum_required(VERSION 3.8)
project(ros2_plain_cmake)

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang")
  add_compile_options(-Wall -Wextra -Wpedantic -Werror)
endif()

add_library(rclcpp INTERFACE)
target_include_directories(rclcpp INTERFACE
  /opt/ros/jazzy/include/builtin_interfaces
  /opt/ros/jazzy/include/libstatistics_collector
  /opt/ros/jazzy/include/rcl
  /opt/ros/jazzy/include/rcl_interfaces
  /opt/ros/jazzy/include/rcl_yaml_param_parser
  /opt/ros/jazzy/include/rclcpp
  /opt/ros/jazzy/include/rcpputils
  /opt/ros/jazzy/include/rcutils
  /opt/ros/jazzy/include/rmw
  /opt/ros/jazzy/include/rosidl_dynamic_typesupport
  /opt/ros/jazzy/include/rosidl_runtime_c
  /opt/ros/jazzy/include/rosidl_runtime_cpp
  /opt/ros/jazzy/include/rosidl_typesupport_interface
  /opt/ros/jazzy/include/rosidl_typesupport_introspection_cpp
  /opt/ros/jazzy/include/service_msgs
  /opt/ros/jazzy/include/statistics_msgs
  /opt/ros/jazzy/include/tracetools
  /opt/ros/jazzy/include/type_description_interfaces)
target_link_libraries(rclcpp INTERFACE
  /opt/ros/jazzy/lib/librcl.so
  /opt/ros/jazzy/lib/librclcpp.so
  /opt/ros/jazzy/lib/librcutils.so
  /opt/ros/jazzy/lib/librmw.so
  /opt/ros/jazzy/lib/libtracetools.so
  # Required for the executable to find dynamic libraries at /opt/ros/jazzy/lib
  # Reference: https://stackoverflow.com/a/60126535/1945549
  "-Wl,--disable-new-dtags")

add_library(std_msgs INTERFACE)
target_include_directories(std_msgs INTERFACE
  /opt/ros/jazzy/include/std_msgs)
target_link_libraries(std_msgs INTERFACE
  /opt/ros/jazzy/lib/libstd_msgs__rosidl_typesupport_cpp.so
  # Required for the executable to find dynamic libraries at /opt/ros/jazzy/lib
  # Reference: https://stackoverflow.com/a/60126535/1945549
  "-Wl,--disable-new-dtags")
© www.soinside.com 2019 - 2024. All rights reserved.