我想在另一个无法使用 Colcon 构建的应用程序中运行 ros2 Windows 节点。
是否可以仅使用对库和头文件的引用来开发 ROS2 节点,而无需 colcon 构建过程?
非常感谢在这方面的任何帮助。
这是使用普通 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")