指定共享/';普通';CppProperties.json或cmakSettings.json中的配置值

指定共享/';普通';CppProperties.json或cmakSettings.json中的配置值,json,visual-studio,cmake,visual-studio-code,Json,Visual Studio,Cmake,Visual Studio Code,当使用VisualStudio的“打开文件夹”功能时,IDE会在一个特殊的json文件中搜索项目设置和配置。对于CPP项目,可以是CppProperties.json。对于CMake项目,可以是CMakeSettings.json 此json文件包含一个或多个“配置”的集合,例如“调试”或“发布”。我将以最近的CMake项目为例: "configurations": [ { "name": "ARM-Debug", "generator": "Ninja",

当使用VisualStudio的“打开文件夹”功能时,IDE会在一个特殊的json文件中搜索项目设置和配置。对于CPP项目,可以是CppProperties.json。对于CMake项目,可以是CMakeSettings.json

此json文件包含一个或多个“配置”的集合,例如“调试”或“发布”。我将以最近的CMake项目为例:

"configurations": [
    {
      "name": "ARM-Debug",
      "generator": "Ninja",
      "configurationType": "Debug",
      "inheritEnvironments": [
        "gcc-arm"
      ],
      "buildRoot": "${env.USERPROFILE}\\CMakeBuilds\\${workspaceHash}\\build\\${name}",
      "installRoot": "${env.USERPROFILE}\\CMakeBuilds\\${workspaceHash}\\install\\${name}",
      "cmakeCommandArgs": "",
      "buildCommandArgs": "-v",
      "ctestCommandArgs": "",
      "intelliSenseMode": "linux-gcc-arm",
      "variables": [
        {
          "name": "CMAKE_TOOLCHAIN_FILE",
          "value": "${workspaceRoot}/cmake/arm-none-eabi-toolchain.cmake"
        }
      ]
    },
    {
      "name": "ARM-Release",
      "generator": "Ninja",
      "configurationType": "Release",
      "inheritEnvironments": [
        "gcc-arm"
      ],
      "buildRoot": "${env.USERPROFILE}\\CMakeBuilds\\${workspaceHash}\\build\\${name}",
      "installRoot": "${env.USERPROFILE}\\CMakeBuilds\\${workspaceHash}\\install\\${name}",
      "cmakeCommandArgs": "",
      "buildCommandArgs": "-v",
      "ctestCommandArgs": "",
      "intelliSenseMode": "linux-gcc-arm",
      "variables": [
        {
          "name": "CMAKE_TOOLCHAIN_FILE",
          "value": "${workspaceRoot}/cmake/arm-none-eabi-toolchain.cmake"
        }
      ]
    }
正如您所看到的,我有两种配置,它们的属性几乎相同


我的问题:是否可以一次性定义这些公共/共享属性,以允许配置继承它们并避免重复我自己?

更简单的方法是在全局级别(在任何配置之外)定义环境,例如:

{
  "environments": [
    {
      "namespace" : "env",
      "varName": "varValue"
    }
  ],
然后,您可以在任何需要的地方重复使用,例如:

  "cmakeCommandArgs": "${env.varName}",
您还可以拥有多个环境并重用它们,如下所示:

{
  "environments": [
    {
      "environment": "env1",
      "namespace": "env",
      "varName": "varValueEnv1"
    },
    {
      "environment": "env2",
      "namespace": "env",
      "varName": "varValueEnv2"
    }

  ],
  "configurations": [
    {
      "name": "x64-Release",
      "inheritEnvironments": [
        "msvc_x64_x64", "env2"
      ],
      "cmakeCommandArgs": "${env.varName}",
.....
    }
  ]
“x64发行版”将在名为“env2”(命名空间“env”)的环境中继承变量的值