跳到主要内容

ROS 依赖架构

目标

为 xmake 用户提供面向包的依赖 API:

add_ros_deps("rclcpp", "geometry_msgs")

无需手动维护 add_includedirs()/add_linkdirs()/add_links()

设计

使用索引架构:

  • 数据源: 每个包安装的 ROS CMake 导出元数据
  • colcon 阶段:AMENT_PREFIX_PATH 生成工作空间本地的 Lua 索引文件
  • xmake 阶段:add_ros_deps(...) 中消费生成的索引

为什么采用这种方式?

  • CMake 导出已经编码了传递依赖和 include/library 提示
  • 索引在构建时从当前 underlay/overlay 生成
  • xmake 只需从标准化元数据中确定性地应用 include/link/rpath

组件

1. 用户 API

add_ros_deps(...)ament_xmake.package 规则提供。

2. 解析器后端

colcon_xmake/task/xmake/build.py::_generate_ros_index_file(...)

  • 扫描 AMENT_PREFIX_PATH 中的包 CMake extras
  • 输出 Lua 表 _AMENT_XMAKE_ROS_INDEX,包含 include 目录、编译定义、链接标志、rpath 目录和依赖关系

3. xmake 集成

xmake/rules/ament_xmake/package.luaadd_ros_deps(...)

  • 标准化包参数
  • 递归解析依赖
  • 将 include 目录 / 定义 / ldflags / rpath 应用到当前目标