使用 ROS 和自动完成功能设置 VScode

问题描述 投票:0回答:3

我正在努力使用 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 上工作。

c++ visual-studio-code autocomplete intellisense ros
3个回答
5
投票

我在 ROS 中使用 IntelliSense 时遇到问题。无论我做什么,它都不会搜索

ros
命名空间。所以我想将
cppStandard
(在文件
c_cpp_properties.json
中)更改为
gnu++11
(无论如何,它仅适用于 IntelliSense)。它立即开始工作。

以下是

cppStandard
设置为
gnu++14
的结果 enter image description here

以下是

cppStandard
设置为
gnu++11
的结果 enter image description here

我什至尝试过

gnu++17
,但这也取得了有限的成功。看起来
gnu++11
效果最好。

我也尝试了理查德在他的回答中所说的话。它无需更改任何其他内容即可工作。


5
投票

您需要生成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。

基本上,步骤是:

  1. cakin_make -DCMAKE_EXPORT_COMPILE_COMMANDS=1
  2. 将compile_commands从catkin_ws/build移到你的vscode工作目录下,我通常把它放在catkin_ws/src下,个人喜好
  3. 将 vscode 指向您的编译命令。

ROS 应该从这里正常工作。

编辑:添加了另一篇文章中答案的步骤


1
投票

在文件

.vscode/c_cpp_properties.json
(由VSCode ROS扩展生成)中,尝试将
"cppStandard": "gnu++14"
更改为
"cppStandard": "c++14"

ROS 使用 c++14 标准,因此指定

gnu++14
似乎会破坏一些东西。这是从这个问题推导出来的。

存在与此相关的问题

© www.soinside.com 2019 - 2024. All rights reserved.