设置 VSCode 以包含/排除 C++ 智能感知的文件夹

Anh*_*ran 5 c++ intellisense visual-studio-code

我经常有一个使用 CMake 的项目来管理我的构建系统。因此,您可以想象我的安装文件夹中会有大量第三方标头和我自己的标头。

当我有相同标头的 2 个副本时,这是非常麻烦的:一个在我的安装文件夹中(旧的),另一个是我现在正在修改的(新的)。当发生这种情况时,有时智能感知不知道哪个是正确的,并且可能认为我的函数签名是错误的(因为它正在查看旧版本)。

当您尝试按 Ctrl + 左键单击类/函数以快速导航到其定义时,也会出现同样的问题。它可能会将我引导到错误的文件(在安装文件夹中),因此修改该文件不会对项目产生影响(因为“真实”文件将快速修改旧文件)。

include我的安装文件夹中的文件夹结构示例:

- boost
    |- fake_boost_header.h
- eigen
    |- not_reap_eigen_header.h
- abseil
    |- real_fake_abseil_header.h
- my_header.h
- my_other_header.h
Run Code Online (Sandbox Code Playgroud)

我已经尝试过以下解决方案,但似乎不起作用:

将 c_cpp_properties.json 中的 includePath 设为install/include/<all_third_party_folder>

欢迎任何想法。我非常愿意使用第三方插件......

小智 2

在我看来,您的install/include/<...>解决方案与您想要的相反,因为它将保证 VS Codeinstall首先找到文件夹中的标头。您可能希望include/**它搜索include文件夹中的所有子目录,假设这是需要编辑标题的位置。

我不确定为什么您希望 VS Code 了解您的安装文件夹,因为这是构建/代码生成过程的输出。如果您的安装文件夹中需要第三方代码的版本,请让构建过程从源代码树中的某个位置将它们复制到其中,这样您就不会在同一目录中混合(外部)源代码和生成的代码。也就是说,将第三方代码视为源代码本身,即使您对其执行的唯一操作是将其复制到您的install文件夹中。然后,您可以将该install文件夹添加到排除文件夹列表中,.vscode/settings.json以避免 VS Code 搜索这些目录:

{
    ...
    "C_Cpp.files.exclude": {
        "install/**": true,
        ...
    },
    "files.watcherExclude": {
        "install/**": true,
        ...
    },
    "search.exclude": {
        "install/**": true,
        ...
    },
    "files.exclude": {
        "install/**": true,
        ...
    },
    ...
}
Run Code Online (Sandbox Code Playgroud)