C++扩展设置参考
C++扩展设置高度可配置。本文解释了c_cpp_properties.json档案。有关 VS Code 中设置的一般信息,请参阅配置设置,以及变量参考和默认 VS 代码设置。
想开始配置你的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
}
顶层属性
-
环境: 一个用户自定义变量数组,可以通过标准环境变量语法在配置中替换:${<var>}或${env:<var>}.字符串和字符串数组都被接受。 -
配置: 一组配置对象,为IntelliSense引擎提供关于你的项目和偏好的信息。默认情况下,扩展会根据你的作系统为你创建配置。你也可以添加更多配置。 -
版本: 我们建议您不要编辑此字段。它跟踪当前版本的c_cpp_properties.json文件,这样扩展名就知道应该包含哪些属性和设置,以及如何将文件升级到最新版本。 -
enableConfigurationSquiggles: 设置为确实如此报告检测到的错误c_cpp_properties.json文件转换为C++扩展。
配置属性
-
名称: 一个用户友好的名称,用于标识配置。Linux,麦克, 和Win32是那些平台上自动选择配置的特殊标识符。VS Code 中的状态栏会显示哪个配置处于激活状态。你也可以在状态栏中选择标签来更改当前的配置。 -
编译路径: 比如你用来构建项目的完整编译器路径/usr/bin/gcc,以实现更准确的IntelliSense。扩展查询编译器以确定系统包含的路径和默认定义,用于IntelliSense。推杆
“编译路径”:“”(空字符串)跳过了对编译器的查询。如果你偏好的编译器不支持查询所需的参数,这很有用,因为扩展默认使用它能找到的任何支持编译器(比如 MSVC)。省略编译路径属性不会跳过查询。 -
编译器Args: 编译器参数用于修改包含路径或定义,例如。-nostdinc++,-M32,等等。使用额外空间分隔参数的参数应作为独立参数输入到数组中,例如:--sysroot <arg>用途\“--sysroot\”, \“<arg>\”. -
intelliSenseMode: 使用该模式的 IntelliSense 映射到架构特定的 MSVC、gcc 或 Clang 变体。如果不是设置,或者设置为${default}扩展选择该平台的默认。平台默认设置:
- Windows:
Windows-MSVC-x64 - Linux:
Linux-GCC-x64 - macOS:
MACOS-CLANG-X64
仅指定 IntelliSense 模式
<编译器><架构>变体(例如,GCC-X64)是遗留模式,会自动转换为<平台>-<编译器>-<架构>基于主机平台的变体。 - Windows:
-
includePath: 包含路径是源文件包含的标题文件目录。例如,源文件包含include指令#include “myHeaderFile.h”,将该头文件的路径添加到includePath.为 IntelliSense 引擎在搜索包含的头文件时指定一条路径列表。在这些路径上搜索不是递归的。在路径末尾指定为递归搜索。例如,/**${workspaceFolder}/**在${workspaceFolder}不会。如果你是在安装了Visual Studio的Windows上,或者编译器在编译路径设置时,系统包含路径不应在此列出。 -
定义: IntelliSense 引擎解析文件时使用的预处理器定义列表。可选地,可以用来设置一个值,例如。=版本=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 工具扩展提供配置信息。如果你指定了一个configurationProvider(配置提供者)它提供的配置优先于你在c_cpp_properties.json.A
configurationProvider(配置提供者)候选扩展必须实现 VScode-CPPtools-API。 -
合并配置: 设置为确实如此合并时包括路径、定义和强制包含,这些包含来自配置提供商的路径。 -
windowsSdk版本: 例如,Windows SDK 版本包含了在 Windows 上使用的路径10.0.17134.0. -
macFrameworkPath: 一份IntelliSense引擎在搜索Mac框架中包含头部时使用的路径列表。 -
强制包含: 一份文件列表,这些文件应在处理源文件中的任何文本之前包含。文件包含在列出的顺序中。 -
compile命令: 一组路径数组,包含完整路径到compile_commands.json工作区的文件夹。如果存在匹配的元素compile_commands.json对于在编辑器中打开的文件,该命令行用于配置该文件的IntelliSense,而不是其他字段c_cpp_properties.json. 有关文件格式的更多信息,请参见 Clang 文档。一些构建系统,如 CMake,简化了生成该文件。 -
dotConfig: 通往.config文件,由 Kconfig 系统创建。Kconfig系统生成一个包含构建项目所需所有定义的文件。使用 Kconfig 系统的项目示例包括 Linux 内核和 NuttX RTOS。 -
customConfigurationVariables: 可以通过命令查询的自定义变量${cpptools:activeConfigCustomVariable}用于 的输入变量launch.json或tasks.json. -
浏览: 与IntelliSense结合使用,用于识别代码库中所有符号的属性集合。这些属性被诸如“进入定义/声明”、“全局符号搜索”等功能所使用,或者当“默认”IntelliSense引擎无法解析#includes在你的源文件里。 -
递归包括: 一组用于配置扩展处理includePath指定递归搜索的条目。
浏览属性
-
路径: 一个路径列表,这些路径的源文件被解析用于全局符号搜索。如果省略,includePath被用作路径.在这些路径上的搜索默认是递归的。请指定为非递归搜索。例如,*${workspaceFolder}在${workspaceFolder}/*不。 -
limitSymbolsToIncluded 头部: 当确实如此, 标签解析器仅解析源文件直接或间接包含的头文件${workspaceFolder}.当错误,标签解析器解析路径中的所有代码文件浏览.path清单。 -
数据库文件名: 通往生成符号数据库的路径。该属性指示扩展将工作区符号数据库保存到工作区默认存储位置以外的地方。如果指定了相对路径,它是相对于工作区默认存储位置,而不是工作区文件夹本身。该${workspaceFolder}变量可用于指定相对于工作区文件夹的路径(例如)${workspaceFolder}/.vscode/browse.vc.db)
递归包括性质
-
减少: 当递归时includePath条目扩展后,IntelliSense 在解析时可以处理大量包含路径#include你源文件中的陈述。向 IntelliSense 编译器发送大量包含路径可能会影响 IntelliSense 在某些系统上的性能。默认情况下,扩展会通过先对搜索的源文件进行标签解析,将包含路径集合减少到最小的集合#include需要陈述并确定哪些包含路径。这种还原过程与永远该设定的选项。这种行为可以抵消一些初始开销,以便IntelliSense以后可能更快。将该属性设置为绝不将提供包含路径的完整递归扩展,以实现IntelliSense进程。通过不在前期解析任何文件,这种行为会牺牲后续性能,以确保 IntelliSense 在打开源文件时能更快地启动。一般来说,减少配置中递归包含路径的数量,当涉及大量路径时,可能会提升IntelliSense的性能。 -
优先级: 递归的优先级包括解析时的路径搜索#include陈述。如果设置为beforeSystemIncludes,递归包含路径在系统包含路径之前被搜索。如果设置为后系统包括递归的include路径将在系统include路径之后进行搜索。beforeSystemIncludes更贴近编译器的搜索顺序,从而更具可预测性,而后系统包括可能会带来性能提升。 -
顺序: 是否搜索递归包含的子目录广度第一或depthFirst(深度第一.
支持的变量
你可以允许tasks.json或launch.json查询当前活跃配置c_cpp_properties.json.为此,使用变量${command:cpptools.activeConfigName}作为 a 中的一个论元tasks.json或launch.json剧本。
默认VS Code设置
所有默认的VS Code设置,比如C_Cpp.default.includePath,在 中得到支持c_cpp_properties.json.唯一的例外是:
C_Cpp.default.systemIncludePath : string[]
该设置允许您单独指定系统包含路径与包含路径。然而,C++扩展从编译器接收到的系统包含路径不会传递给IntelliSense进程。这只在极少数情况下使用,因为它覆盖了标准编译器的行为,例如当你的编译器不被支持时。相反,应该用设置编译器Args并使用-isystemflag 来指定系统头部,这在大多数情况下是更好的解决方案。