使用 ROS 设置 VScode 并自动完成

DiX*_*uli 14 c++ intellisense autocomplete ros visual-studio-code

我正在努力使用 ROS 配置 VSCode 以具有自动完成功能。我习惯于在 Qt 和 OpenCV 中使用 VSCode,一切正常。例如,对于 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
Run Code Online (Sandbox Code Playgroud)

}

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
Run Code Online (Sandbox Code Playgroud)

}

就像 ROS 正在阻止一切。我究竟做错了什么?我指定在 VSCode 中单击“打开文件夹”并浏览 ROS 包以加载它。我正在使用 Ubuntu 18.04 LTS。

Ric*_*ard 5

您需要生成compile_commands.json并将其放入您的vscode工作目录中。该文件将告诉 vscode linter 去哪里查找。如果您创建新文件或 CMakeLists.txt 中的编译指令发生更改(即新库),则需要重新生成此文件

\n

我制作了一个YouTube 视频来演示这个

\n

我还在 reddit 上的类似帖子中回答了这个问题:有谁让 Visual Studio 能够与 ROS 正常工作吗?。我在下面添加了我为此写的答案;

\n

如果你使用catkin_make,当你编译时,

\n

cakin_make -DCMAKE_EXPORT_COMPILE_COMMANDS=1

\n

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

\n

如果您使用catkin工具,由于构建系统不同,您将在构建后运行一个脚本以将个体合并compile_commands.json为一个

\n

请参阅此处的问题以获取脚本。

\n

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

\n
\n

在配置 UI 的“高级”部分中,您可以提供 \xc2\xa0compile_commands.json\xc2\xa0 的路径,并且扩展将使用该文件中列出的编译信息来配置 IntelliSense。

\n
\n

基本上,步骤是:

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

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

\n

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

\n


Avn*_*hra 4

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

cppStandard这是设置为的结果gnu++14 在此输入图像描述

cppStandard这是设置为的结果gnu++11 在此输入图像描述

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

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