VSCode的C++智能感知很好用,但对于PCL(点云库)不起作用。

7
在SO上,已经有很多关于VSCode IntelliSense的问题,例如que1que2que3等。然而,它们主要讨论IntelliSense总体上不起作用;不适用于STL等。
另一方面,在我的情况下,我已经使用Microsoft的C/C++ Extension和IntelliSense可以正常工作,包括所有不同的内置类、函数、STL等。但是,当涉及到PCL(点云库)时,不知何故,IntelliSense不起作用。
如果您熟悉 PCL,那么您一定知道它的大多数语法都非常复杂。由于 IntelliSense 无法为其工作,如果您在输入每个字符时不仔细检查,则很有可能会出现打字错误,例如:
pcl::PointCloud<pcl::PointXYZRGB>::Ptr point_cloud_ptr (new pcl::PointCloud<pcl::PointXYZRGB>);

事实上,即使是那些变量和函数的自动完成也不起作用——例如,从上面的例子中,每次我想使用point_cloud_ptr时都必须手动输入每个字符。
那么,我该如何解决这个问题?或者在PCL中不可能实现?
注意:我在我的Ubuntu 16以及Ubuntu 18上遇到了这个问题。我使用sudo apt install libpcl-dev安装了PCL,并且头文件位于/usr/include/目录中。

我曾在微软的C/C++扩展官方GitHub问题页面上提出了同样的问题,最终找到了解决方案(但并不是理想的解决方案)。 这是链接:https://github.com/microsoft/vscode-cpptools/issues/5843 - Milan
2个回答

4
尝试了不同的方法并在 GitHub 上得到了微软 VSCode(和 C/C++ 扩展)团队的帮助后,看起来 IntelliSense 不能正常工作,可能是因为扩展无法找到 PCL 头文件。
在 Ubuntu 的情况下,PCL 头文件通常存储在 /usr/include/pcl-<version> 中。在我的 Ubuntu 18.04 中,我有 pcl-1.8。因此,理想情况下,在 c_cpp_properties.json 文件的 "includePath" 下添加 "/usr/include/pcl-1.8/**" 应该可以工作。例如:
{
    "configurations": [
        {
            .
            .
            "includePath": [
                "${workspaceFolder}/**",
                "/usr/include/pcl-1.8/**"
            ],
            .
            .
            .
        }
    ],
    "version": 4
}

"/usr/include/pcl-1.8/**"中,**是用于在/usr/include/pcl-1.8/目录下进行递归搜索。但是,在我发布这个问题的时候(我认为现在也是如此),它不起作用。它不能通过pcl-<version>目录下的子目录。因此,以下是替代方案:


解决方案 01:(如果您只想将更改应用于当前项目,请使用此方法)

打开C/C++扩展配置文件:c_cpp_properties.json(在Linux上,按Ctrl + Shift + P,然后选择C/C++: Edit Configurations (JSON)

现在,由于递归搜索无法工作,另一种方式是指定所有includePath下的子目录:

{
    "configurations": [
        {
            .
            .
            "includePath": [
                "${workspaceFolder}/**",
                "/usr/include/eigen3",
                "/usr/include/pcl-1.8",
                "/usr/include/pcl-1.8/pcl",
                "/usr/include/pcl-1.8/pcl/2d",
                "/usr/include/pcl-1.8/pcl/apps",
                "/usr/include/pcl-1.8/pcl/common",
                "/usr/include/pcl-1.8/pcl/compression",
                "/usr/include/pcl-1.8/pcl/console",
                "/usr/include/pcl-1.8/pcl/features",
                "/usr/include/pcl-1.8/pcl/filters",
                "/usr/include/pcl-1.8/pcl/geometry",
                "/usr/include/pcl-1.8/pcl/impl",
                "/usr/include/pcl-1.8/pcl/in_hand_scanner",
                "/usr/include/pcl-1.8/pcl/io",
                "/usr/include/pcl-1.8/pcl/kdtree",
                "/usr/include/pcl-1.8/pcl/keypoints",
                "/usr/include/pcl-1.8/pcl/ml",
                "/usr/include/pcl-1.8/pcl/modeler",
                "/usr/include/pcl-1.8/pcl/octree",
                "/usr/include/pcl-1.8/pcl/outofcore",
                "/usr/include/pcl-1.8/pcl/people",
                "/usr/include/pcl-1.8/pcl/range_image",
                "/usr/include/pcl-1.8/pcl/recognition",
                "/usr/include/pcl-1.8/pcl/registration",
                "/usr/include/pcl-1.8/pcl/ros",
                "/usr/include/pcl-1.8/pcl/sample_consensus",
                "/usr/include/pcl-1.8/pcl/search",
                "/usr/include/pcl-1.8/pcl/segmentation",
                "/usr/include/pcl-1.8/pcl/stereo",
                "/usr/include/pcl-1.8/pcl/surface",
                "/usr/include/pcl-1.8/pcl/tracking",
                "/usr/include/pcl-1.8/pcl/visualization"
            ],
            .
            .
            .
        }
    ],
    "version": 4
}

解决方案02:(如果您想在所有项目中应用更改,请使用此选项)

c_cpp_properties.json是针对每个项目的C/C++配置文件,编辑它只会应用于当前项目。因此,要在所有项目中应用更改,必须先更新settings.json,然后再更新c_cpp_properies.json

打开settings.json并添加以下文本:

    "C_Cpp.default.includePath": [
        "/usr/include/eigen3",
        "/usr/include/pcl-1.8",
        "/usr/include/pcl-1.8/pcl",
        "/usr/include/pcl-1.8/pcl/2d",
        "/usr/include/pcl-1.8/pcl/apps",
        "/usr/include/pcl-1.8/pcl/common",
        "/usr/include/pcl-1.8/pcl/compression",
        "/usr/include/pcl-1.8/pcl/console",
        "/usr/include/pcl-1.8/pcl/features",
        "/usr/include/pcl-1.8/pcl/filters",
        "/usr/include/pcl-1.8/pcl/geometry",
        "/usr/include/pcl-1.8/pcl/impl",
        "/usr/include/pcl-1.8/pcl/in_hand_scanner",
        "/usr/include/pcl-1.8/pcl/io",
        "/usr/include/pcl-1.8/pcl/kdtree",
        "/usr/include/pcl-1.8/pcl/keypoints",
        "/usr/include/pcl-1.8/pcl/ml",
        "/usr/include/pcl-1.8/pcl/modeler",
        "/usr/include/pcl-1.8/pcl/octree",
        "/usr/include/pcl-1.8/pcl/outofcore",
        "/usr/include/pcl-1.8/pcl/people",
        "/usr/include/pcl-1.8/pcl/range_image",
        "/usr/include/pcl-1.8/pcl/recognition",
        "/usr/include/pcl-1.8/pcl/registration",
        "/usr/include/pcl-1.8/pcl/ros",
        "/usr/include/pcl-1.8/pcl/sample_consensus",
        "/usr/include/pcl-1.8/pcl/search",
        "/usr/include/pcl-1.8/pcl/segmentation",
        "/usr/include/pcl-1.8/pcl/stereo",
        "/usr/include/pcl-1.8/pcl/surface",
        "/usr/include/pcl-1.8/pcl/tracking",
        "/usr/include/pcl-1.8/pcl/visualization"
    ]

打开 c_cpp_properties.json 文件并更新 includePath
{
    "configurations": [
        {
            .
            .
            "includePath": [
                "${workspaceFolder}/**",
                "${default}"
            ],
            .
            .
            .
        }
    ],
  
  "version": 4
}

P.S. 我曾在 Microsoft 的 C/C++ 扩展官方 GitHub 问题页面上询问过同样的问题,最终找到了(不过不是理想的)上述解决方案。

这里是更多信息的链接:https://github.com/microsoft/vscode-cpptools/issues/5843


0
因为VSCode总是告诉我找不到一些依赖项,比如pcl/PCLHeader.h。所以我尝试将/usr/include/pcl-1.10/pcl复制到/usr/include/,然后它就起作用了。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接