DoubleLi

qq: 517712484 wx: ldbgliet

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
  4737 随笔 :: 2 文章 :: 542 评论 :: 1615万 阅读
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

不使用 CMake 的“打开文件夹”项目可以将 IntelliSense 的项目配置设置存储在 CppProperties.json 文件中。 (CMake 项目使用 CMakeSettings.json 文件。) 配置包含名称/值对,定义了 #include 路径、编译器开关和其他参数组成。 有关如何在“打开文件夹”项目中添加配置的详细信息,请参阅 C++ 的“打开文件夹”项目。 以下各节总结了各种设置。 有关架构的完整说明,请导航到 CppProperties_schema.json ,其完整路径会在 CppProperties.json 打开时在代码编辑器顶部提供。

配置属性

一个配置可能会有以下列出的其中几个属性:

配置属性
名称 说明
inheritEnvironments 指定哪些环境适用于此配置。
name 将出现在 C++ 配置下拉菜单中的配置名称
includePath 应在包含路径(对于大多数编译器,映射到 /I)中指定的文件夹的逗号分隔列表
defines 应定义的宏的列表(对于大多数编译器,映射到 /D)
compilerSwitches 可以影响 IntelliSense 行为的一个或多个附加开关
forcedInclude 会自动包含在每个编译单元的标头(对于 MSVC,映射到 /FI;对于 clang,映射到 -include)
undefines 未定义的宏的列表(对于 MSVC,映射到 /U)
intelliSenseMode 要使用的 IntelliSense 引擎。 你可以为 MSVC、gcc 或 Clang 指定预定义体系结构特定的变量之一。
environments 用户定义的变量集,它们的行为类似于命令提示符中的环境变量,并使用 $ {env. <VARIABLE > } 宏。

intelliSenseMode 值

开始键入内容时代码编辑器会显示可用选项:

编辑器中 IntelliSense 弹出窗口的屏幕截图。

以下是支持的值:

  • windows-msvc-x86
  • windows-msvc-x64
  • windows-msvc-arm
  • windows-msvc-arm64
  • android-clang-x86
  • android-clang-x64
  • android-clang-arm
  • android-clang-arm64
  • ios-clang-x86
  • ios-clang-x64
  • ios-clang-arm
  • ios-clang-arm64
  • windows-clang-x86
  • windows-clang-x64
  • windows-clang-arm
  • windows-clang-arm64
  • linux-gcc-x86
  • linux-gcc-x64
  • linux-gcc-arm

注意:仅出于遗留原因支持 msvc-x86 和 msvc-x64 值。 改用 windows-msvc-* 变量。

预定义环境

Visual Studio 为 Microsoft C++ 提供了以下预定义环境,它们会映射到相应的开发人员命令提示。 当继承其中一个环境时,可以通过使用具有以下宏语法的 global 属性来引用任何环境变量 env : $ {env。 <VARIABLE > }。

预定义环境
变量名 描述
vsdev 默认的 Visual Studio 环境
msvc_x86 使用 x86 工具为 x86 编译
msvc_x64 使用 64 位工具为 AMD64 编译
msvc_arm 使用 x86 工具为 ARM 编译
msvc_arm64 使用 x86 工具为 ARM64 编译
msvc_x86_x64 使用 x86 工具为 AMD64 编译
msvc_arm_x64 使用 64 位工具为 ARM 编译
msvc_arm64_x64 使用 64 位工具为 ARM64 编译

安装 Linux 工作负载后,可使用以下环境变量远程定向到 Linux 和 WSL:

预定义环境
变量名 描述
linux_x86 远程将 x86 Linux 设为目标
linux_x64 远程将 x64 Linux 设为目标
linux_arm 远程将 ARM Linux 设为目标

用户定义的环境

您可以根据需要使用 environments 属性来定义 environments 中的变量集全局或每个配置。 这些变量的行为类似于打开文件夹项目上下文中的环境变量,并且可以使用 $ {env 进行访问。 <在 > 此处定义了来自<的>语法} 语法。 但是,不一定要在 Visual Studio 内部使用的任何命令提示符中将它们设置为实际环境变量。

2019 16.4 及更高版本:cppproperties.json中定义的特定于配置的变量由调试目标和任务自动选取,无需设置 。 Visual Studio 调试目标会使用在 CppProperties.json 中指定的环境自动启动。

Visual Studio 2019 版本16.3 及更早版本:使用环境时,必须在属性中指定该环境, 即使环境定义为相同配置的一部分,属性也将 environment 指定环境的名称。 下面的示例演示在 MSYS2 安装中为 GCC 启用 IntelliSense 的示例配置。 请注意配置如何定义和继承 mingw_64 环境,以及 includePath 属性如何访问 INCLUDE 变量。

JSON
"configurations": [
    {

      "inheritEnvironments": [
        "mingw_64"
      ],
      "name": "Mingw64",
      "includePath ,": [
        "${env.INCLUDE}",
        "${workspaceRoot}\\**",
      ],
      "intelliSenseMode": "linux-gcc-x64",
      "environments": [
        {
          "MINGW64_ROOT": "C:\\msys64\\mingw64",
          "BIN_ROOT": "${env.MINGW64_ROOT}\\bin",
          "FLAVOR": "x86_64-w64-mingw32",
          "TOOLSET_VERSION": "9.1.0",
          "PATH": "${env.MINGW64_ROOT}\\bin;${env.MINGW64_ROOT}\\..\\usr\\local\\bin;${env.MINGW64_ROOT}\\..\\usr\\bin;${env.MINGW64_ROOT}\\..\\bin;${env.PATH}",
          "INCLUDE": "${env.MINGW64_ROOT}\\include\\c++\\${env.TOOLSET_VERSION};${env.MINGW64_ROOT}\\include\\c++\\${env.TOOLSET_VERSION}\\tr1;${env.MINGW64_ROOT}\\include\\c++\\${env.TOOLSET_VERSION}\\${env.FLAVOR};",
          "environment": "mingw_64"
        }
      ]
    }
  ]

在配置中定义环境 属性时,它将替代任何同名的全局变量。

内置宏

可访问 CppProperties.json 中的下列内置宏:

内置宏
说明
${workspaceRoot} 工作区文件夹的完整路径
${projectRoot} CppProperties.json 所在文件夹的完整路径
${env.vsInstallDir} 安装 Visual Studio 的运行示例的文件夹的完整路径

示例

如果项目具备包含文件夹并包含 windows.h 和 Windows SDK 中的其他通用标头,可能需要更新 CppProperties.json 配置文件,使其带有以下包含内容:

JSON
{
  "configurations": [
    {
      "name": "Windows",
      "includePath": [
        // local include folder
        "${workspaceRoot}\include",
        // Windows SDK and CRT headers
        "${env.WindowsSdkDir}\include\${env.WindowsSDKVersion}\ucrt",
        "${env.NETFXSDKDir}\include\um",
        "${env.WindowsSdkDir}\include\${env.WindowsSDKVersion}\um",
        "${env.WindowsSdkDir}\include\${env.WindowsSDKVersion}\shared",
        "${env.VCToolsInstallDir}\include"
      ]
    }
  ]
}

 备注

%WindowsSdkDir% 和 %VCToolsInstallDir% 并不是作为全局环境变量设置的,请确保从定义这些变量的开发人员命令提示启动 devenv.exe。 (在 Windows“开始”菜单中键入“developer”。)

对 IntelliSense 错误进行故障排除

如果未看到期望的 IntelliSense,可以通过访问"工具""选项""文本编辑器 C/C++高级 ",将"启用日志记录"设置为 进行故障排除 。 若要开始,请尝试将“日志记录级别”设置为 5,“日志记录筛选器”设置为 8 。

“选项”对话框中“诊断日志记录”设置的屏幕截图。

输出会传递给“输出窗口”,并在选择“显示输出来源 : Visual C++ 日志”时显示。 除了其他内容之外,输出还包含 IntelliSense 尝试使用的实际包含路径的列表。 如果路径与 CppProperties.json 中的路径不匹配,请尝试关闭文件夹并删除包含缓存浏览数据的 .vs 子文件夹。

若要对缺少包含路径引起的 IntelliSense 错误进行故障排除,请打开“错误列表”,筛选出“仅限 IntelliSense”和错误代码 E1696“无法打开源文件...”的结果 。

 

from: https://docs.microsoft.com/zh-cn/cpp/build/cppproperties-schema-reference?view=msvc-170&viewFallbackFrom=vs-2015

posted on   DoubleLi  阅读(1210)  评论(0编辑  收藏  举报
编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
历史上的今天:
2017-12-29 使用 acl 库针对 C++ 对象进行序列化及反序列编程
2017-12-29 cereal:C++实现的开源序列化库
2017-12-29 Google FlatBuffers——开源、跨平台的新一代序列化工具
2017-12-29 FlatBuffers使用简介
2012-12-29 Unicode下TRACE中文(_CrtDbgReport: String too long or IO Error) .解决办法
2012-12-29 VC++2005、VC2008中Release版本设置为可调试的设置方法
2011-12-29 MVC笔记
点击右上角即可分享
微信分享提示