使用compile_commands.json配置includePath环境,解决ros开发时vscode中引入头文件处有波浪线的问题

使用 vscode 开发 ros 程序时,经常会发现引入头文件处有下滑波浪线,提示找不到头文件。对于该问题,可以通过编译时生成的 compile_commands.json 文件自动完成对 vscode 中头文件路径的配置,实现 vscode 中的代码的自动跳转。完成头文件路径配置后,可以避免代码头部导入头文件部分出现波浪线,警告说无法正确找到头文件。

步骤

  1. 需要在 vscode 中安装 C++ 和 CMake Tools 扩展插件;

在这里插入图片描述

  1. 使用下述命令重新编译代码;
catkin_make -DCMAKE_BUILD_TYPE=Release -DCMAKE_EXPORT_COMPILE_COMMANDS=Yes

这将会导出一个编译命令文件 compile_commands.json,这可以帮助 vscode 确定代码架构。该配置文件的的生成目录在工作空间的 build 文件夹下。

重新用 vscode 打开项目,可以看见在 .vscode 文件夹下生成的 c_cpp_properties.jsonsettings.json 文件。其中 c_cpp_properties.json 文件中的 includePath 参数中的头文件路径已经自动配置完成。

注意: 如果原先 .vscode 文件夹已经存在 c_cpp_properties.jsonsettings.json 文件的话,需要先手动删除,我测试的时候,好像不会覆盖重新生成,从而导致头文件路径无法自动添加。

在这里插入图片描述

此时,文件头部的波浪线已经消失了。如果没有,需要关闭该文件页面,然后重新打开。波浪线消失前后对比效果如下。

在这里插入图片描述

在这里插入图片描述

  1. 在文件 c_cpp_properties.json 中添加 compileCommands 选项;

也可以将 includePath 参数中的头文件路径全部删除,然后额外添加一个 compileCommands 参数,来指定生成的compile_commands.json 文件的位置,这也能够实现相同的效果。

"compileCommands": "${workspaceFolder}/build/compile_commands.json"

在这里插入图片描述

两种参数添加方式概览

这两部分内容,保留其一就好。同时,保留也没啥问题。

在这里插入图片描述

补充

在文件 c_cpp_properties.json 添加的路径,仅仅是用于 vscode 跳转显示用的,与代码编译过程无关。见参考链接 [2]

参考

[1] vscode使用compile_commands.json配置includePath环境
[2] VSCode改了include path仍找不到头文件是为什么? - Latria的回答 - 知乎

当你在编译代码,如果出现了 "#include" 错误,通常是由于编译器无法找到所需的头文件导致的。这种错误可能是由于以下几个原因引起的: 1. 缺少头文件:检查你的代码中是否包含了正确的头文件路径和文件名。确保你使用了正确的语法和文件名拼写。 2. 头文件路径错误:检查你的编译器设置或项目配置文件(如 compile_commands.json)中的头文件路径是否正确。确保编译器可以找到所需的头文件。 3. 编译器选项错误:检查你的编译器选项是否正确设置。有候,你可能需要在编译命令中显式地指定头文件路径或使用适当的编译器选项。 4. 缺少依赖库:如果你的代码依赖于某些外部库,确保这些库已正确安装并在编译过程中可用。 解决这些问题的方法包括: 1. 更新 compile_commands.json:如果你使用的是 CMake 构建系统,确保你的 compile_commands.json 文件已正确生成,并包含了正确的头文件路径。 2. 更新 includePath:如果你在使用集成开发环境(IDE)或编辑器插件,确保你的 includePath 设置包含了正确的头文件路径。 3. 检查头文件路径:仔细检查你的代码中的头文件路径是否正确,并确保文件存在于指定的路径中。 4. 检查编译器选项:检查你的编译器选项是否正确设置,并确保头文件路径被正确地传递给编译器。 希望这些解决方法能帮助你解决 "#include" 错误。如果你有任何进一步的问题,请随提问。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值