【问题标题】:VScode setup with ROS and auto complete带有 ROS 和自动完成的 VScode 设置
【发布时间】:2020-10-04 13:44:55
【问题描述】:

我正在努力使用 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 扩展)。 但是,一旦我尝试在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。

【问题讨论】:

  • 你有这方面的消息吗?我也想让这个工作? ROS 扩展并没有完全削减它。

标签: c++ visual-studio-code autocomplete intellisense ros


【解决方案1】:

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

ROS 正在使用c++14 standard,因此指定gnu++14 似乎会破坏事情。这是从this question推导出来的。

issue 与此有关。

【讨论】:

    【解决方案2】:

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

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

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

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

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

    【讨论】:

    • 你是个巫师,老实说,这是黑魔法:P
    【解决方案3】:

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

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

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

    如果你使用catkin_make,编译时,

    cakin_make -DCMAKE_EXPORT_COMPILE_COMMANDS=1

    编译后,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. 将 compile_commands 从 catkin_ws/build 移到你的 vscode 工作目录下,我一般在 catkin_ws/src 下,个人喜好
    3. 将 vscode 指向您的编译命令。

    ROS 应该从这里正常工作。

    编辑:从另一个帖子中的答案中添加了步骤

    【讨论】:

    • 欢迎提供解决方案链接,但请确保您的答案在没有它的情况下有用。答案只不过是一个链接may be deleted
    • 嗨。如果我说ros::NodeHandle n; 然后我希望我的自动完成到n. 找到我的n 相关方法、属性等,我该怎么办?我提到我在 ubuntu 上使用 VScode 并且我已经安装了自动完成插件,并且我已经安装了 ROS 插件。目前我只收到n. -> 没有建议。
    • 另外,Point vscode to your compile commands. this 是什么?
    • 如果您按照视频中显示的步骤操作,您应该可以自动完成到n
    • Point vscode to your compile command指做you can then restart VScode, and it will prompt you...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多