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
}
顶级属性
-
环境一系列用户定义的变量,可以通过标准环境变量语法在配置中进行替换:${或${环境:<变量>}字符串和字符串数组是被接受的。 -
配置一组配置对象,向IntelliSense引擎提供有关您的项目和您偏好的信息。默认情况下,该扩展会根据您的操作系统为您创建一个配置。您还可以添加更多配置。 -
版本我们建议您不要编辑此字段。它跟踪当前版本的c_cpp_properties.json文件,以便扩展知道应包含哪些属性和设置以及如何将此文件升级到最新版本。 -
启用配置波浪线设置为真报告检测到的错误c_cpp_properties.json将文件传输到 C++ 扩展。
配置属性
-
名字易于使用的名称,用于标识配置。Linux,苹果电脑,和Win32是那些平台自动选择的配置的特殊标识符。VS Code 状态栏显示当前活动的配置。您还可以点击状态栏中的标签来更改活动配置。 -
编译器路径编译器的完整路径,例如,用于构建你的项目/usr/bin/gcc为了实现更准确的IntelliSense,该扩展查询编译器以确定系统包含路径和用于IntelliSense的默认定义。放置
"compilerPath": ""(空字符串) 跳过查询编译器。如果您的首选编译器不支持用于查询的参数,这很有用,因为扩展会默认使用它可以找到的任何受支持编译器(如 MSVC)。省略编译器路径属性不会跳过查询。 -
编译器参数编译器参数用于修改包含路径或定义,例如-标准C++,-m32等等。需要额外空间分隔的参数应作为数组中的单独参数输入,例如,对于--sysroot <参数>使用\"--sysroot\", \"<arg>\"输入:. -
智能感知模式用于映射到特定架构的 MSVC、gcc 或 Clang 版本的 IntelliSense 模式。如果未设置或设置为${默认}该扩展将为该平台选择默认值。平台默认设置:
- Windows:
Windows-MSVC-x64 - Linux:
linux-gcc-x64 - macOS:
macos-clang-x64
IntelliSense 模式仅指定
<编译器>-<架构>变体(例如,gcc-x64) 是遗留模式,并会自动转换为<平台>-<编译器>-<架构>基于主机平台的变体。 - Windows:
-
包含路径: 编译包含路径是一个目录,包含源文件中引用的头文件。例如,一个源文件包含包含指令# include "myHeaderFile.h"将此头文件的路径添加到包含路径指定一个路径列表,以便在搜索包含的头文件时,IntelliSense引擎使用这些路径。这些路径上的搜索不是递归的。指定/**在路径的末尾表示递归搜索。例如,${工作区文件夹}/**搜索所有子目录${工作区文件夹}不会。如果你在安装了Visual Studio的Windows系统上,或者在指定编译器的编译器路径设置中,系统包含的路径不应在此列出。 -
定义: 用于解析文件时,IntelliSense引擎使用的预处理器定义列表。可选地,使用输入:=要设置一个值,例如版本=1输入:. -
标准C语言用于IntelliSense的C语言标准版本。例如,c17,gnu23,或${默认}注意:GNU 标准仅用于查询编译器以获取 GNU 定义,并且 IntelliSense 会模拟等效的 C 标准版本。 -
cpp标准用于IntelliSense的C++语言标准版本。例如,C++20,GNU++23,或${默认}注意:GNU 标准仅用于查询编译器以获取 GNU 定义,并且 IntelliSense 会模拟相应的 C++ 标准版本。 -
配置提供者一个 VS Code 扩展的 ID,该扩展可以为源文件提供 IntelliSense 配置信息。例如,使用 VS Code 扩展 IDms-vscode.cmake-tools提供来自 CMake Tools 扩展的配置信息。如果您指定了一个配置提供者它提供的配置将优先于您的其他设置c_cpp_properties.json输入:.一个
配置提供者候选扩展必须实现 vscode-cpptools-api. -
合并配置设置为真合并包含路径、定义和强制包含与配置提供者中的路径。 -
windowsSdkVersionWindows SDK 版本包含在 Windows 上使用的路径,例如10.0.17134.0输入:. -
mac框架路径: 一个列表,用于IntelliSense引擎在从Mac框架搜索包含头文件时使用的路径。 -
强制包含在处理源文件中的任何文本之前,应该包含的文件列表。文件按照列出的顺序包含。 -
编译命令: 一个包含完整路径的路径数组到编译命令.json工作区的文件。如果有一个匹配的条目在编译命令.json对于在编辑器中打开的文件,该命令行用于为该文件配置IntelliSense,而不是其他字段c_cpp_properties.json. 有关文件格式的更多信息,请参阅 Clang 文档。某些构建系统,例如 CMake,简化了生成此文件的过程。 -
点配置一条通往配置文件,由Kconfig系统创建。Kconfig系统生成一个包含构建项目所需所有定义的文件。使用Kconfig系统的项目示例有Linux内核和NuttX实时操作系统。 -
自定义配置变量通过命令可以查询的自定义变量${cpptools:activeConfigCustomVariable}用于输入变量launch.json或任务.json输入:. -
浏览: 用于与IntelliSense结合以标识代码库中所有符号的属性集合。这些属性被诸如转到定义/声明、全局符号搜索,或当“默认”IntelliSense引擎无法解析#包括在你的源文件中。 -
递归包含: 一组用于配置扩展如何处理的属性包含路径指定递归搜索的条目。
浏览物业
-
路径解析用于全局符号搜索的源文件的路径列表。如果省略,包含路径被用作路径在这些路径上搜索默认是递归的。指定输入:*用于指示非递归搜索。例如,${工作区文件夹}搜索所有子目录${工作区文件夹}/*不。 -
限制符号到包含头文件: 当真标签解析器只解析直接或间接被源文件包含的头文件${工作区文件夹}当假的标签解析器解析在指定路径中找到的所有代码文件浏览路径列表。 -
数据库文件名生成的符号数据库的路径。此属性指示扩展将工作区符号数据库保存在工作区的默认存储位置之外的其他位置。如果指定了相对路径,则该路径相对于工作区的默认存储位置,而不是工作区文件夹本身。${工作区文件夹}变量可以用来指定相对于工作区文件夹的路径(例如${workspaceFolder}/.vscode/browse.vc.db)
递归包含属性
-
减少当一个递归包含路径条目展开后,可能会导致一个非常大的包含路径集,IntelliSense 在解析时需要处理这些路径。# 包含在你的源文件中声明。向IntelliSense编译器发送大量包含路径可能会对某些系统的IntelliSense性能产生影响。默认情况下,该扩展将通过首先对源文件进行标签解析来减少包含路径的集合,以搜索# 包含语句并确定哪些包含路径是需要的。这个减少过程与总是此设置的选项。此行为会牺牲一些初始开销,以便IntelliSense在之后可能更快。将此属性设置为从不将为IntelliSense进程提供完整的递归展开的包含路径。通过不提前解析任何文件,这种行为在确保在打开源文件时IntelliSense能够更快速启动时,牺牲了潜在的性能。通常,减少配置中的递归包含路径数量,当涉及大量路径时,可以提高IntelliSense的性能。 -
优先级在解析时,递归包含路径搜索的优先级# 包含语句。如果设置为系统包含之前递归包含路径在系统包含路径之前被搜索。如果设置为系统包含之后递归包含路径将在系统包含路径之后搜索。系统包含之前更接近编译器的搜索顺序,从而提高可预测性,而系统包含之后可能会提高性能。 -
订单递归包含的子目录是否被搜索广度优先或深度优先输入:.
支持的变量
你可以允许任务.json或launch.json查询当前活动配置c_cpp_properties.json要执行此操作,请使用变量${命令:cpptools.活动配置名称}作为论据在任务.json或launch.json脚本。
默认 VS Code 设置
所有默认 VS Code 设置,例如C_Cpp默认包含路径, 在c_cpp_properties.json唯一例外是:
C_Cpp.default.systemIncludePath : string[]
此设置允许您将系统包含路径与包含路径分开指定。然而,C++ 扩展从编译器接收到的选定系统包含路径不会传递给 IntelliSense 进程。这仅在罕见情况下使用,因为它覆盖了标准编译器行为,例如,如果您的编译器不受支持。相反,请使用设置编译器参数和使用-系统使用标志指定系统头文件,这在大多数情况下是一个更好的解决方案。