# ROS2 同包自定义 msg 头文件无法 include

> 原文链接：https://robotics.hellobike.com/pitfalls/2022-09-22-robotics-se-23171
> 频道：pitfalls | 更新日期：2022-09-22 | 标签：auto, stackexchange, c++, ros-galactic
> 核心摘要：同一包内生成的自定义消息头无法包含，需把节点目标链接到 rosidl 生成的 typesupport 目标。

# ROS2 同包自定义 msg 头文件无法 include

::: v-pre
> 本文由 AI 根据公开内容整理，可能有误，请以原文为准：[Creating a custom msg in ros2](https://robotics.stackexchange.com/questions/23171/creating-a-custom-msg-in-ros2)（Robotics Stack Exchange #23171）

**状态**：已解决

## 问题

包内两个节点通信时创建 `msg/Custom.msg`，已生成 `build/devenv/rosidl_generator_cpp/devenv/msg/custom.hpp`，但源码中无法 `include` 该 hpp 文件。

## 环境

ROS 2 (Humble / Jazzy) · ROS 2

## 解决办法

1. 保留 `rosidl_generate_interfaces(${PROJECT_NAME} "msg/Custom.msg")`，但还需让节点目标链接到生成的接口目标。
2. ROS 2 Galactic 及以下：对节点如 `my_node` 添加 `rosidl_target_interfaces(my_node ${PROJECT_NAME} "rosidl_typesupport_cpp")`。
3. ROS 2 Humble 及以上：添加 `rosidl_get_typesupport_target(cpp_typesupport_target ${PROJECT_NAME} "rosidl_typesupport_cpp")`，再用 `target_link_libraries(my_node "${cpp_typesupport_target}")`。

原问题作者：Mercury；采纳答案作者：Geoff。原内容依 CC BY-SA 4.0 授权，本页摘要同样依 CC BY-SA 4.0 授权。
:::

## 原始参考来源 (Sources)

- [Robotics Stack Exchange #23171：Creating a custom msg in ros2](https://robotics.stackexchange.com/questions/23171/creating-a-custom-msg-in-ros2)