在ros1 noetic中,分开设计头文件,源文件和执行文件

目录

需求

流程

1.头文件

2.源文件

3.可执行文件

4.配置文件


需求

设计头文件与源文件,在可执行文件中包含头文件。

流程

  1. 编写头文件;
  2. 编写源文件;
  3. 编写可执行文件;
  4. 编辑配置文件并执行。

1.头文件

头文件,在功能包下的 include/功能包名 目录下新建头文件: haha.h,示例内容如下:

注意:一定要在include/功能包名目录下,

#ifndef _HAHA_H
#define _HAHA_H

namespace hello_ns {

class My {

public:
    void run();

};

}

#endif

注意:

在 VScode 中,为了后续包含头文件时不抛出异常,请配置 .vscode 下 c_cpp_properties.json 的 includepath属性

"/home/用户/工作空间/src/功能包/include/**"

2.源文件

在 src 目录下新建文件:haha.cpp,示例内容如下:

#include "test_head_src/haha.h"
#include "ros/ros.h"

namespace hello_ns{

void My::run(){
    ROS_INFO("hello,head and src ...");
}

}

3.可执行文件

在 src 目录下新建文件: use_head.cpp,示例内容如下:

#include "
<think>我们正在讨论如何在VSCode的`includePath`中添加ROS头文件路径。根据用户提供的引用,特别是引用[1]至[4],我们可以总结出以下关键点: 1. ROS开发中,头文件路径问题通常通过配置`c_cpp_properties.json`文件中的`includePath`来解决。 2. 常见的ROS头文件路径包括ROS安装路径(如`/opt/ros/<distro>/include/**`)工作空间中devel、src下的include路径。 3. 有时需要为每个新增的功能包手动添加路径,但也可以使用通配符`**`来递归包含子目录。 4. 另一种方法是利用`compile_commands.json`自动配置(引用[1]),这需要CMake项目生成该文件,并在VSCode中配置C/C++扩展使用它。 因此,我们可以提供两种方法:手动修改`c_cpp_properties.json`自动使用`compile_commands.json`。 ### 方法1:手动修改`c_cpp_properties.json` **步骤:** 1. **打开配置文件** 在VSCode中,按下`Ctrl+Shift+P`,输入`C/C++: Edit Configurations (JSON)`并选择,打开`c_cpp_properties.json`文件。 2. **添加ROS头文件路径** 在`includePath`数组中添加以下路径(根据你的ROS版本工作空间路径调整): ```json "includePath": [ "${workspaceFolder}/**", // 当前工作空间的所有子目录 "/opt/ros/<你的ROS版本>/include/**", // 系统ROS头文件路径 "/home/<用户名>/<工作空间>/devel/include/**", // 工作空间中devel目录下的头文件 "/home/<用户名>/<工作空间>/src/**" // 工作空间src下的所有头文件 ] ``` **替换说明**: - `<你的ROS版本>`:如`melodic`、`noetic`、`humble`等。 - `<用户名>`:你的Linux用户名。 - `<工作空间>`:你的ROS工作空间文件夹名(如`catkin_ws`)。 示例(ROS Melodic): ```json "includePath": [ "${workspaceFolder}/**", "/opt/ros/melodic/include/**", "/home/justin/catkin_ws/devel/include/**", "/home/justin/catkin_ws/src/**", "/usr/include/**" // 系统标准库 ] ``` 3. **保存并重载** 保存文件后,VSCode会自动重新加载配置。如果未生效,关闭并重新打开VSCode。 ### 方法2:使用`compile_commands.json`自动配置(推荐) 这种方法利用CMake编译生成的`compile_commands.json`文件自动设置头文件路径编译选项,无需手动维护。 **步骤:** 1. **生成`compile_commands.json`** 在ROS工作空间根目录执行: ```bash catkin_make -DCMAKE_EXPORT_COMPILE_COMMANDS=1 ``` 或者修改CMakeLists.txt,在`project()`前添加: ```cmake set(CMAKE_EXPORT_COMPILE_COMMANDS ON) ``` 2. **创建符号链接** 将生成的`compile_commands.json`链接到工作空间根目录: ```bash ln -s build/compile_commands.json compile_commands.json ``` (注意:如果生成路径不同,请调整) 3. **配置VSCode** - 打开VSCode设置(`Ctrl+,`),搜索`C++: Default Configuration Provider` - 设置为`ms-vscode.cpptools`(使用C/C++扩展的默认配置) - 搜索`C++: Preferred Default Configuration Provider`,选择`ms-vscode.makefile-tools`或`ms-vscode.cmake-tools`(如果使用CMake Tools扩展) 4. **重启VSCode** 重新打开工作空间,此时C/C++扩展会自动加载`compile_commands.json`中的路径配置。 ### 验证配置 - 打开任意ROS源文件(如包含`#include "ros/ros.h"`的文件),检查红色波浪线是否消失。 - 悬停在`#include`行,应显示头文件完整路径。 ### 注意事项 1. **路径通配符`/**`** 使用`/**`递归包含子目录,避免遗漏嵌套头文件[^3]。 2. **新增功能包** 手动配置时,新增功能包需在`includePath`中添加对应路径(引用[2]);自动配置则无需修改。 3. **ROS 2差异** ROS 2(如Foxy、Humble)的工作空间路径为`install/<package>/include`,而非`devel/include`。示例: ```json "/opt/ros/humble/include/**", "/home/<用户名>/<工作空间>/install/**" ``` 4. **排除无效路径** 如果索引过慢,在`c_cpp_properties.json`中添加`excludePath`: ```json "excludePath": [ "build/**", "devel/**", "**/.vscode/**" ] ``` > **原理说明**:VSCode的C/C++扩展通过`includePath`定位头文件ROS头文件通常位于系统路径(`/opt/ros`)工作空间构建生成路径(`devel/include`或`install`)中。手动配置需覆盖所有可能路径,而`compile_commands.json`则包含编译时的精确路径[^1]。 §§相关问题§§ 1. 如何为ROS 2工作空间配置VSCode的头文件路径? 2. 使用`compile_commands.json`时VSCode仍然报错怎么办? 3. 如何避免手动添加每个ROS功能包的头文件路径? </think>### 在VSCode中添加ROS头文件路径的完整指南 #### 方法1:手动修改c_cpp_properties.json(推荐) 这是最直接的解决方案,适用于所有ROS版本(包括ROS1ROS2): 1. **打开配置文件** - 在VSCode中按`Ctrl+Shift+P`,输入`C/C++: Edit Configurations (JSON)` - 打开项目目录下的`.vscode/c_cpp_properties.json` 2. **添加ROS头文件路径** 在`includePath`数组中添加以下条目(根据你的ROS版本路径修改): ```json { "configurations": [ { "includePath": [ "${workspaceFolder}/**", // 当前工作空间 "/opt/ros/YOUR_ROS_VERSION/include/**", // ROS系统头文件 "/home/YOUR_USERNAME/catkin_ws/devel/include/**", // 工作空间devel目录 "/home/YOUR_USERNAME/catkin_ws/src/**", // 工作空间源码目录 "/usr/include/**" // 系统标准库 ], "name": "ROS", "cppStandard": "c++17", // ROS2推荐使用c++17 // 其他配置保持默认... } ], "version": 4 } ``` **关键替换值**: - `YOUR_ROS_VERSION`:你的ROS版本(如`melodic`, `noetic`, `humble`) - `YOUR_USERNAME`:你的Linux用户名 - `catkin_ws`:你的工作空间名称(如果是ROS2则改为`ros2_ws`) 3. **保存后重载窗口** - 按`Ctrl+S`保存 - `Ctrl+Shift+P` → 输入`Reload Window` #### 方法2:使用compile_commands.json(自动化方案) 此方法让VSCode自动获取构建系统的路径配置: 1. **生成编译数据库** ```bash # ROS1 catkin_make -DCMAKE_EXPORT_COMPILE_COMMANDS=1 # ROS2 colcon build --cmake-args -DCMAKE_EXPORT_COMPILE_COMMANDS=ON ``` 2. **配置VSCode** - 安装C/C++CMake Tools扩展 - `.vscode/settings.json`中添加: ```json { "C_Cpp.default.compileCommands": "${workspaceFolder}/build/compile_commands.json" } ``` 3. **重载配置** - 关闭并重新打开VSCode #### 验证配置是否生效 1. 打开包含ROS头文件源文件(如`#include <rclcpp/rclcpp.hpp>`) 2. 悬停在include语句上,应显示完整路径: ``` /opt/ros/humble/include/rclcpp/rclcpp.hpp ``` 3. 按`F12`可跳转到头文件定义 #### 常见问题排查 | 问题现象 | 解决方案 | |---------|----------| | 添加路径后仍报错 | 检查路径权限:`ls -l /opt/ros/humble/include` | | ROS2头文件找不到 | 确认cppStandard为`c++17` | | 工作空间路径错误 | 终端执行:`echo $ROS_PACKAGE_PATH` | | 配置未生效 | 删除`.vscode/browse.vc.db`后重载 | > **路径通配符说明**:使用`/**`递归包含子目录(如`/opt/ros/humble/include/**`会包含所有嵌套的头文件),这是解决ROS多层头文件结构的关键[^1][^3]。 #### 配置示例(ROS2 Humble) ```json { "configurations": [ { "includePath": [ "${workspaceFolder}/**", "/opt/ros/humble/include/**", "/home/user/ros2_ws/install/**", "/usr/include/**" ], "name": "ROS2", "cppStandard": "c++17", "compilerPath": "/usr/bin/g++", "intelliSenseMode": "linux-gcc-x64" } ], "version": 4 } ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值