我正在努力使用 ROS 配置 VSCode 以使其具有自动完成功能。 我习惯于将 VSCode 与 Qt 和 OpenCV 结合使用,一切正常。 例如,对于 OpenCV,我只是这样编辑
c_cpp_propreties.json
:
{
"configurations": [
{
"name": "Linux",
"includePath": [
"${workspaceFolder}/**",
"/usr/local/include/opencv4/opencv2"
],
"defines": [],
"compilerPath": "/usr/bin/gcc",
"cStandard": "gnu11",
"cppStandard": "gnu++14",
"intelliSenseMode": "clang-x64"
}
],
"version": 4
}
OpenCV 的自动完成功能运行良好(我有 C++ IntelliSense 扩展)。 但是,一旦我尝试在
include
中指定 ROS 中的 c_cpp_propreties.json
文件夹,就没有任何作用了,甚至 OpenCV 自动完成也不起作用:
{
"configurations": [
{
"name": "Linux",
"includePath": [
"${workspaceFolder}/**",
"/usr/local/include/opencv4/opencv2",
"/opt/ros/melodic/include"
],
"defines": [],
"compilerPath": "/usr/bin/gcc",
"cStandard": "gnu11",
"cppStandard": "gnu++14",
"intelliSenseMode": "clang-x64"
}
],
"version": 4
}
就好像 ROS 阻止了一切。我做错了什么?我指定在 VSCode 中单击“打开文件夹”并浏览 ROS 包来加载它。 我正在 Ubuntu 18.04 LTS 上工作。
我在 ROS 中使用 IntelliSense 时遇到问题。无论我做什么,它都不会搜索
ros
命名空间。所以我想将 cppStandard
(在文件 c_cpp_properties.json
中)更改为 gnu++11
(无论如何,它仅适用于 IntelliSense)。它立即开始工作。
以下是
cppStandard
设置为 gnu++14
的结果
以下是
cppStandard
设置为 gnu++11
的结果
我什至尝试过
gnu++17
,但这也取得了有限的成功。看起来 gnu++11
效果最好。
我也尝试了理查德在他的回答中所说的话。它无需更改任何其他内容即可工作。
您需要生成compile_commands.json并将其放入您的vscode工作目录中。该文件将告诉 vscode linter 去哪里查找。如果您创建新文件或 CMakeLists.txt 中的编译指令发生更改(即新库),则需要重新生成此文件
我制作了一个 youtube 视频 来演示这个
我也在 reddit 上的类似帖子中回答了这个问题:有谁让 Visual Studio 能够与 ROS 正常工作吗?。我在下面添加了我为此写的答案;
如果你使用catkin_make,当你编译时,
cakin_make -DCMAKE_EXPORT_COMPILE_COMMANDS=1
编译后,
compile_commands.json
将出现在您的构建文件夹中。
如果您使用catkin工具,由于构建系统不同,构建后您将需要运行一个脚本来将各个
compile_commands.json
合并为一个
然后你可以重新启动VScode,它启动时会提示你是否要使用它。如果由于某种原因它没有提示您,
在配置 UI 的“高级”部分中,您可以提供compile_commands.json 的路径,扩展程序将使用该文件中列出的编译信息来配置 IntelliSense。
基本上,步骤是:
ROS 应该从这里正常工作。
编辑:添加了另一篇文章中答案的步骤
在文件
.vscode/c_cpp_properties.json
(由VSCode ROS扩展生成)中,尝试将"cppStandard": "gnu++14"
更改为"cppStandard": "c++14"
。
ROS 使用 c++14 标准,因此指定
gnu++14
似乎会破坏一些东西。这是从这个问题推导出来的。
存在与此相关的问题。