VScode 使用 ROS 设置并自动完成

VScode setup with ROS and auto complete

我正在努力配置 VSCode ROS 以具有自动完成功能。 我习惯于将 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 扩展)。 但是,一旦我尝试在 c_cpp_propreties.json 中从 ROS 指定 include 文件夹,就没有任何工作了,甚至 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。

您需要生成 compile_commands.json 并将其放入您的 vscode 工作目录。这个文件会告诉 vscode linter 去哪里找。如果您在 CMakeLists.txt 更改(即新库)

中创建新文件或编译指令,则需要重新生成

我做了一个youtube video来演示这个

我也在 reddit 上用类似的 post 回答了这个问题:Has anyone got Visual Studio to work properly with ROS?。我在下面添加了我为此写的答案;

如果使用catkin_make,编译时,

cakin_make -DCMAKE_EXPORT_COMPILE_COMMANDS=1

A compile_commands.json 将在编译后出现在您的构建文件夹中。

如果你使用catkin工具,因为构建系统不同,构建后你会有一个运行一个脚本将个体compile_commands.json合并为一个

See the issue here for script.

然后你可以重新启动VScode,它会在启动时提示你是否要使用它。如果它出于某种原因没有提示您,

In the "Advanced" section of the Configuration UI, you can supply the path to your compile_commands.json and the extension will use the compilation information listed in that file to configure IntelliSense.

基本上,步骤是:

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

ROS 从这里应该可以正常工作。

编辑:从另一个 post

中的答案添加了步骤

我在使用 IntelliSense 和 ROS 时遇到问题。无论我做什么,它都不会搜索 ros 命名空间。所以我想将 cppStandard(在文件 c_cpp_properties.json 中)更改为 gnu++11(无论如何它仅适用于 IntelliSense)。它立即开始工作。

这是 cppStandard 设置为 gnu++14 的结果

这是 cppStandard 设置为 gnu++11 的结果

我什至尝试过 gnu++17,但也收效甚微。看起来 gnu++11 效果最好。

我也尝试了 Richard 在 中所说的内容。它无需更改任何其他内容即可工作。

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

ROS 正在使用 c++14 standard, so specifying gnu++14 seems to break things. This was deduced from this question

存在关于此的 issue