C++ 带ROS的VScode设置和自动完成

C++ 带ROS的VScode设置和自动完成,c++,visual-studio-code,autocomplete,intellisense,ros,C++,Visual Studio Code,Autocomplete,Intellisense,Ros,我正在努力用ROS配置VSCode,使其具有自动完成功能。 我习惯于将VSCode与Qt和OpenCV一起使用,一切都很好。 例如,对于OpenCV,我刚刚编辑了c_cpp_propreties.json,如下所示: { "configurations": [ { "name": "Linux", "includePath": [ "${wor

我正在努力用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++智能感知扩展)。 但是,一旦我试图在

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
}

好像罗斯在封锁一切。我做错了什么?我指定在VSCode中单击“打开文件夹”,并浏览ROS包以加载它。
我正在使用Ubuntu18.04 LTS。

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

我做了一个演示

我也在reddit上的类似帖子中回答了这个问题:。我在下面添加了我为此写的答案

如果使用catkin_make,编译时

cakin\u make-DCMAKE\u EXPORT\u COMPILE\u COMMANDS=1

编译后,
compile\u commands.json
将出现在构建文件夹中

如果您使用catkin工具,因为构建系统不同,您将需要在构建后运行脚本,以将各个
compile\u命令.json
合并为一个脚本

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

基本上,这些步骤是:

  • cakin\u make-DCMAKE\u EXPORT\u COMPILE\u命令=1
  • 将compile_命令从您的vscode工作目录下的catkin_ws/build移到catkin_ws/src,personal preference下
  • 将vscode指向编译命令
  • ROS应该在这里正常工作


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

    我在将IntelliSense与ROS一起使用时遇到问题。无论我做了什么,它都不会搜索
    ros
    名称空间。因此,我考虑将
    cpp标准
    (在文件
    c\u cpp\u properties.json
    )更改为
    gnu++11
    (无论如何,它只适用于IntelliSense)。它立即开始工作

    以下是
    cppStandard
    设置为
    gnu++14

    以下是
    cppStandard
    设置为
    gnu++11

    我甚至尝试过
    gnu++17
    ,但这也只能取得有限的成功。看起来
    gnu++11
    工作得最好


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

    在文件
    .vscode/c_cpp_properties.json
    (由生成)中,尝试从
    “cppStandard”:“gnu++14”
    更改为
    “cppStandard”:“c++14”

    ROS正在使用,因此指定
    gnu++14
    似乎会破坏一切。这是从中推断出来的


    关于这件事有一个新的消息。

    你有什么消息吗?我也在试着让它工作?ROS扩展没有完全解决这个问题。欢迎链接到解决方案,但请确保没有它,您的答案是有用的。答案只不过是一个链接。嗨。如果我有,让我们说
    ros::NodeHandle n
    然后我希望我的自动完成功能
    n.
    找到我的
    n
    相关方法、属性等。我该怎么做?我提到我在ubuntu上使用VScode,安装了autocomplete插件,还安装了ROS插件。目前我只收到
    n.
    ->没有任何建议。还有,
    将vscode指向编译命令是什么意思。
    这是什么?如果您按照视频中显示的步骤进行操作,您应该自动完成
    n
    将vscode指向编译命令
    指执行
    然后可以重新启动vscode,它会提示你…
    你是个巫师,老实说,这是黑魔法:P