现已推出!阅读 10 月份的新功能和修复。

c_cpp_properties.json 参考

本文解释了 c_cpp_properties.json 设置文件方案。

想要开始配置项目?请参阅 配置 IntelliSense。有关更改这些设置的更多信息,请参阅 自定义默认设置

变量示例

注意,这是一个所有字段的示例。您不需要在 c_cpp_properties.json 文件中指定所有字段。扩展会自动使用默认值填充任何缺失的字段。

{
  "env": {
    "myIncludePath": ["${workspaceFolder}/include", "${workspaceFolder}/src"],
    "myDefines": ["DEBUG", "MY_FEATURE=1"]
  },
  "configurations": [
    {
      "name": "Linux",
      "compilerPath": "/usr/bin/gcc",
      "compilerArgs": ["-m32"],
      "intelliSenseMode": "linux-gcc-x86",
      "includePath": ["${myIncludePath}", "/usr/include"],
      "defines": ["${myDefines}"],
      "cStandard": "gnu11",
      "cppStandard": "gnu++14",
      "configurationProvider": "ms-vscode.cmake-tools",
      "forcedInclude": ["${workspaceFolder}/common.h"],
      "compileCommands": "${workspaceFolder}/build/compile_commands.json",
      "dotConfig": "${workspaceFolder}/.config",
      "mergeConfigurations": true,
      "customConfigurationVariables": {
        "myVar": "myvalue"
      },
      "browse": {
        "path": ["${myIncludePath}", "/usr/include", "${workspaceFolder}"],
        "limitSymbolsToIncludedHeaders": true,
        "databaseFilename": "${workspaceFolder}/.vscode/browse.vc.db"
      }
    },
    {
      "name": "Mac",
      "compilerPath": "/usr/bin/clang",
      "intelliSenseMode": "macos-clang-x64",
      "includePath": ["${myIncludePath}"],
      "defines": ["${myDefines}"],
      "cStandard": "c11",
      "cppStandard": "c++17",
      "macFrameworkPath": ["/System/Library/Frameworks", "/Library/Frameworks"],
      "browse": {
        "path": ["${myIncludePath}", "${workspaceFolder}"]
      }
    },
    {
      "name": "Win32",
      "compilerPath": "C:/Program Files (x86)/Microsoft Visual Studio/2019/Community/VC/Tools/MSVC/14.28.29333/bin/Hostx64/x64/cl.exe",
      "intelliSenseMode": "windows-msvc-x64",
      "includePath": ["${myIncludePath}"],
      "defines": ["${myDefines}", "_WINDOWS"],
      "cStandard": "c17",
      "cppStandard": "c++20",
      "windowsSdkVersion": "10.0.19041.0",
      "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/C++ 扩展。

配置属性

  • name 一个用于识别配置的友好名称。LinuxMacWin32 是将在这些平台上自动选择的配置的特殊标识符。VS Code 中的状态栏将显示哪个配置处于活动状态。您也可以选择状态栏中的标签以更改活动配置。

  • compilerPath (可选)用于构建项目的编译器的完整路径,例如 /usr/bin/gcc,以启用更准确的 IntelliSense。扩展将查询编译器以确定用于 IntelliSense 的系统包含路径和默认定义。

    "compilerPath": ""(空字符串)将跳过查询编译器。如果指定的编译器不支持用于查询的参数,则此操作很有用,因为扩展将默认返回到它可以找到的任何编译器(例如 Visual C)。省略 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> 变体。

  • includePath 包含路径是一个包含头文件的文件夹(例如 #include "myHeaderFile.h"),这些头文件包含在源文件中。指定 IntelliSense 引擎在搜索包含的头文件时要使用的路径列表。这些路径上的搜索不是递归的。指定 ** 表示递归搜索。例如,${workspaceFolder}/** 将搜索所有子目录,而 ${workspaceFolder} 不会。如果在安装了 Visual Studio 的 Windows 上,或者如果在 compilerPath 设置中指定了编译器,则无需在此列表中列出系统包含路径。

  • defines 用于 IntelliSense 引擎在解析文件时要使用的预处理器定义列表。可选地,使用 = 设置一个值,例如 VERSION=1

  • cStandard 用于 IntelliSense 的 C 语言标准的版本。例如,c17gnu23${default}。请注意,GNU 标准仅用于查询已设置的编译器以获取 GNU 定义,IntelliSense 将模拟等效的 C 标准版本。

  • cppStandard 用于 IntelliSense 的 C++ 语言标准的版本。例如,c++20gnu++23${default}。注意:GNU 标准仅用于查询已设置的编译器以获取 GNU 定义,IntelliSense 将模拟等效的 C++ 标准版本。

  • configurationProvider 可以为源文件提供 IntelliSense 配置信息的 VS Code 扩展的 ID。例如,使用 VS Code 扩展 ID ms-vscode.cmake-tools 来提供来自 CMake Tools 扩展的配置信息。如果您已指定 configurationProvider,则提供的配置将优先于 c_cpp_properties.json 中的其他设置。

    configurationProvider 候选扩展必须实现 vscode-cpptools-api

  • windowsSdkVersion 要在 Windows 上使用的 Windows SDK 包含路径的版本,例如 10.0.17134.0

  • macFrameworkPath IntelliSense 引擎在搜索从 Mac 框架包含的头文件时要使用的路径列表。仅在 macOS 的配置上受支持。

  • forcedInclude (可选)一个在处理源文件中的任何其他字符之前应该包含的文件列表。文件按列出的顺序包含。

  • compileCommands (可选)工作区中 compile_commands.json 文件的完整路径。如果 compile_commands.json 中存在与编辑器中打开的文件匹配的条目,则该命令行将用于为该文件配置 IntelliSense,而不是 c_cpp_properties.json 的其他字段。有关文件格式的更多信息,请参阅 Clang 文档。某些构建系统(如 CMake)可以 简化此文件的生成

  • dotConfig Kconfig 系统创建的 .config 文件的路径。Kconfig 系统会生成一个包含构建项目所需的所有定义的文件。使用 Kconfig 系统的项目示例包括 Linux 内核和 NuttX RTOS。

  • mergeConfigurations 设置为 true 可将包含路径、定义和强制包含与配置提供程序中的那些路径合并。

  • customConfigurationVariables 可以通过命令 ${cpptools:activeConfigCustomVariable} 查询的自定义变量,用于 launch.jsontasks.json 中的输入变量。

  • browse"C_Cpp.intelliSenseEngine" 设置为 "Tag Parser"(也称为“模糊”IntelliSense 或“浏览”引擎)时使用的一组属性。这些属性还用于**转到定义/声明**功能,或者当“默认”IntelliSense 引擎无法解析源文件中的 #includes 时使用。

浏览属性

  • path Tag Parser 用于搜索源文件包含的头文件的路径列表。如果省略,includePath 将用作 path。默认情况下,这些路径上的搜索是递归的。指定 * 表示非递归搜索。例如:${workspaceFolder} 将搜索所有子目录,而 ${workspaceFolder}/* 不会。

  • limitSymbolsToIncludedHeaders 当设置为真时,标签解析器将仅解析由${workspaceFolder} 中的源文件直接或间接包含的代码文件。当设置为假时,标签解析器将解析在browse.path 列表中指定的路径中找到的所有代码文件。

  • databaseFilename 生成的符号数据库的路径。此属性指示扩展将标签解析器的符号数据库保存到工作区默认存储位置以外的某个位置。如果指定了相对路径,则该路径将相对于工作区的默认存储位置,而不是工作区文件夹本身。${workspaceFolder} 变量可用于指定相对于工作区文件夹的路径(例如 ${workspaceFolder}/.vscode/browse.vc.db)。

支持的变量

您可以允许tasks.jsonlaunch.jsonc_cpp_properties.json 查询当前活动配置。为此,请在tasks.jsonlaunch.json 脚本中使用变量${command:cpptools.activeConfigName} 作为参数。