C++ 扩展设置参考
C++ 扩展设置具有高度可配置性。本文档解释了 c_cpp_properties.json 文件的模式。有关 VS Code 中设置的常规信息,请参阅配置设置,以及变量参考和默认 VS Code 设置。
想开始配置 C++ 项目吗?请从配置 IntelliSense 开始。
变量示例
以下 JSON 代码片段是 c_cpp_properties.json 的配置示例。您只需在 JSON 文件中包含相关变量,任何缺失的字段都将由 C++ 扩展用其默认值填充。
{
"env": {
"myIncludePath": ["${workspaceFolder}/include", "${workspaceFolder}/src"],
"myDefines": ["DEBUG", "MY_FEATURE=1"]
},
"configurations": [
{
"name": "Mac",
"compilerPath": "/usr/bin/clang++",
"intelliSenseMode": "macos-clang-x64",
"includePath": ["${myIncludePath}", "${workspaceFolder}/**"],
"defines": ["${myDefines}"],
"cStandard": "c17",
"cppStandard": "c++20",
"macFrameworkPath": ["/System/Library/Frameworks", "/Library/Frameworks"],
"browse": {
"path": ["${myIncludePath}", "${workspaceFolder}"]
}
}
],
"version": 4,
"enableConfigurationSquiggles": true
}
顶级属性
-
env:一个用户定义变量数组,通过标准环境变量语法${<var>}或${env:<var>}可用于配置中的替换。接受字符串和字符串数组。 -
configurations:一个配置对象数组,为 IntelliSense 引擎提供有关您的项目和偏好的信息。默认情况下,扩展会根据您的操作系统为您创建一个配置。您还可以添加更多配置。 -
version:我们建议您不要编辑此字段。它跟踪c_cpp_properties.json文件的当前版本,以便扩展知道应该存在哪些属性和设置以及如何将此文件升级到最新版本。 -
enableConfigurationSquiggles:设置为true以将c_cpp_properties.json文件中检测到的错误报告给 C++ 扩展。
配置属性
-
name:一个用户友好的名称,用于标识配置。Linux、Mac和Win32是在这些平台上自动选择的配置的特殊标识符。VS Code 中的状态栏显示哪个配置处于活动状态。您还可以选择状态栏中的标签来更改活动配置。 -
compilerPath:用于构建项目的编译器的完整路径,例如/usr/bin/gcc,以启用更准确的 IntelliSense。扩展查询编译器以确定用于 IntelliSense 的系统包含路径和默认定义。将
"compilerPath": ""(空字符串)跳过查询编译器。如果您的首选编译器不支持用于查询的参数,这将很有用,因为扩展默认为它能找到的任何受支持的编译器(如 MSVC)。省略compilerPath属性不会跳过查询。 -
compilerArgs:用于修改包含路径或定义的编译器参数,例如-nostdinc++、-m32等。接受额外空格分隔参数的参数应作为数组中的单独参数输入,例如,对于--sysroot <arg>使用\"--sysroot\", \"<arg>\"。 -
intelliSenseMode:要使用的 IntelliSense 模式,它映射到 MSVC、gcc 或 Clang 的特定于架构的变体。如果未设置或设置为${default},则扩展选择该平台的默认值。平台默认值
- Windows:
windows-msvc-x64 - Linux:
linux-gcc-x64 - macOS:
macos-clang-x64
仅指定
<compiler>-<architecture>变体(例如gcc-x64)的 IntelliSense 模式是旧模式,并根据主机平台自动转换为<platform>-<compiler>-<architecture>变体。 - Windows:
-
includePath:包含路径是源文件包含的头文件目录。例如,源文件包含 include 指令#include "myHeaderFile.h",将此头文件的路径添加到includePath。指定 IntelliSense 引擎在搜索包含的头文件时使用的路径列表。这些路径上的搜索不是递归的。在路径末尾指定/**表示递归搜索。例如,${workspaceFolder}/**搜索所有子目录,而${workspaceFolder}则不会。如果您在 Windows 上安装了 Visual Studio,或者在compilerPath设置中指定了编译器,则不应在此处列出系统包含路径。 -
defines:IntelliSense 引擎在解析文件时使用的预处理器定义列表。可以选择使用=设置一个值,例如VERSION=1。 -
cStandard:用于 IntelliSense 的 C 语言标准版本。例如,c17、gnu23或${default}。注意:GNU 标准仅用于查询设置的编译器以获取 GNU 定义,IntelliSense 模拟等效的 C 标准版本。 -
cppStandard:用于 IntelliSense 的 C++ 语言标准版本。例如,c++20、gnu++23或${default}。注意:GNU 标准仅用于查询设置的编译器以获取 GNU 定义,IntelliSense 模拟等效的 C++ 标准版本。 -
configurationProvider:一个 VS Code 扩展的 ID,可以为源文件提供 IntelliSense 配置信息。例如,使用 VS Code 扩展 IDms-vscode.cmake-tools从 CMake Tools 扩展提供配置信息。如果您指定了configurationProvider,它提供的配置优先于c_cpp_properties.json中的其他设置。一个
configurationProvider候选扩展必须实现 vscode-cpptools-api。 -
mergeConfigurations:设置为true以将包含路径、定义和强制包含与配置提供者中的那些合并。 -
windowsSdkVersion:在 Windows 上使用的 Windows SDK 包含路径的版本,例如10.0.17134.0。 -
macFrameworkPath:IntelliSense 引擎在搜索 Mac 框架中包含的头文件时使用的路径列表。 -
forcedInclude:在处理源文件中的任何文本之前应包含的文件列表。文件按列出的顺序包含。 -
compileCommands:包含工作区compile_commands.json文件完整路径的路径数组。如果编辑器中打开的文件在compile_commands.json中有匹配条目,则使用该命令行配置该文件的 IntelliSense,而不是c_cpp_properties.json的其他字段。有关文件格式的更多信息,请参阅 Clang 文档。一些构建系统,例如 CMake,简化了此文件的生成。 -
dotConfig:Kconfig 系统创建的.config文件的路径。Kconfig 系统生成一个包含构建项目所需的所有定义的文件。使用 Kconfig 系统的项目示例是 Linux 内核和 NuttX RTOS。 -
customConfigurationVariables:自定义变量,可以通过命令${cpptools:activeConfigCustomVariable}查询,用于launch.json或tasks.json中的输入变量。 -
browse:与 IntelliSense 结合使用的属性集,用于识别代码库中的所有符号。这些属性由诸如 跳转到定义/声明、全局符号搜索等功能使用,或者当“默认”IntelliSense 引擎无法解析源文件中的#includes时使用。 -
recursiveIncludes:一组属性,用于配置扩展如何处理指定递归搜索的includePath条目。
浏览属性
-
path:源文件被解析以用于全局符号搜索的路径列表。如果省略,则将includePath用作path。这些路径上的搜索默认是递归的。指定*表示非递归搜索。例如,${workspaceFolder}搜索所有子目录,而${workspaceFolder}/*则不会。 -
limitSymbolsToIncludedHeaders:当为true时,标签解析器只解析${workspaceFolder}中源文件直接或间接包含的头文件。当为false时,标签解析器解析browse.path列表中指定路径中找到的所有代码文件。 -
databaseFilename:生成的符号数据库的路径。此属性指示扩展将工作区符号数据库保存到工作区默认存储位置之外的其他位置。如果指定相对路径,则它相对于工作区的默认存储位置,而不是工作区文件夹本身。${workspaceFolder}变量可用于指定相对于工作区文件夹的路径(例如${workspaceFolder}/.vscode/browse.vc.db)
递归包含属性
-
reduce:当递归includePath条目展开时,它可能会导致 IntelliSense 在解析源文件中的#include语句时需要处理大量的包含路径。向 IntelliSense 编译器发送大量的包含路径可能会影响某些系统上 IntelliSense 的性能。默认情况下,扩展将通过首先标签解析源文件以搜索#include语句并确定需要哪些包含路径来将包含路径集减少到最小可能的集合。此减少过程与此设置的always选项的行为相同。这种行为以一些初始开销换取 IntelliSense 以后可能更快。将此属性设置为never将为 IntelliSense 进程提供包含路径的完整递归展开。通过不预先解析任何文件,这种行为以潜在的后期性能换取确保 IntelliSense 在源文件打开时更快启动。一般来说,减少配置中递归包含路径的数量可能会在涉及大量路径时提高 IntelliSense 性能。 -
priority:在解析#include语句时,递归包含路径搜索的优先级。如果设置为beforeSystemIncludes,则在系统包含路径之前搜索递归包含路径。如果设置为afterSystemIncludes,则在系统包含路径之后搜索递归包含路径。beforeSystemIncludes更接近地反映了编译器的搜索顺序,从而导致更高的可预测性,而afterSystemIncludes可能会提高性能。 -
order:递归包含的子目录是按breadthFirst(广度优先)还是depthFirst(深度优先)搜索。
支持的变量
您可以允许 tasks.json 或 launch.json 查询 c_cpp_properties.json 中当前的活动配置。为此,请在 tasks.json 或 launch.json 脚本中将变量 ${command:cpptools.activeConfigName} 用作参数。
默认 VS Code 设置
所有默认的 VS Code 设置,例如 C_Cpp.default.includePath,都支持在 c_cpp_properties.json 中。唯一的例外是
C_Cpp.default.systemIncludePath : string[]
此设置允许您将系统包含路径与包含路径分开指定。但是,C++ 扩展从编译器接收到的选定系统包含路径不会传递给 IntelliSense 进程。这仅在极少数情况下使用,因为它会覆盖标准编译器行为,例如,如果您的编译器不受支持。相反,使用设置 compilerArgs 并使用 -isystem 标志指定系统头文件,这在大多数情况下是更好的解决方案。