如何将用户特定的缓存变量添加到 CMakePresets.json 中的配置预设?

问题描述 投票:0回答:1

我有这个

CMakePresets.json

{
    "version": 5,
    "configurePresets": [
        {
            "name": "MSVC-VS-2022-x64",
            "displayName": "MSVC-VS-2022-x64",
            "description": "Ninja Multi-Config Build",
            "generator": "Ninja Multi-Config",
            "binaryDir": "${sourceParentDir}/${sourceDirName}Build",
            "cacheVariables": {
                "CMAKE_VS_VERSION_RANGE": "[17.0,18.0)",
                "CMAKE_CONFIGURATION_TYPES": "Debug;Release"
            }
        }
    ],
    "buildPresets": [
        {
            "name": "Debug",
            "displayName": "Debug",
            "configurePreset": "MSVC-VS-2022-x64",
            "configuration": "Debug"
        },
        {
            "name": "Release",
            "displayName": "Release",
            "configurePreset": "MSVC-VS-2022-x64",
            "configuration": "Release"
        }
    ]
}

我希望我们的开发人员能够将具有用户特定值

ACTIVE_SUBSETS
的缓存变量
A;B;C
添加到配置预设
MSVC-VS-2022-x64

我尝试使用这个

CMakeUserPresets.json

{
    "version": 5,
    "configurePresets": [
        {
            "name": "MSVC-VS-2022-x64",
            "cacheVariables": {
                "ACTIVE_SUBSETS": "A;B;C"
            }
        }
    ]
}

但这显然会创建一个新的配置预设,而不是修改现有的配置预设。

CMake 错误:无法从 C:/tt/SourceRoot 读取预设:

重复预设:“MSVC-VS-2022-x64”

我的

CMakeUserPresets.json
需要是什么样子才能在配置预设中覆盖或添加值?

也可以复制

CMakePresets.json
,重命名为
CMakeUserPresets.json
,然后修改。不幸的是,这两个文件似乎总是被加载。

与缓存变量类似,环境变量和binaryDir也应该能够被覆盖。

cmake cmake-presets
1个回答
0
投票

预设一旦定义,就无法覆盖。只有定义new预设时才能继承。

如果您想在

CMakePresets.json
中定义预设并允许用户通过单独的文件自定义其某些属性,那么您可以继承一些其他预设,这些预设将位于单独的文件中。该单独的文件不能是
CMakeUserPresets.json
,因为该文件中的预设不能被
CMakePresets.json
中的预设继承。但您可以为此目的创建任何其他文件:

CMakeCustomizedPresets.json

{
    "version": 5,
    "configurePresets": [
        {
            "name": "CustomizableBase",
            "description": "Here you could add cache variables, environment variables which you want additionally to see in the predefined presets"
        }
    ]
}

并将该文件包含到

CMakePresets.json
:

CMakePresets.json

{
    "version": 5,
    "include": [
      "CMakeCustomizablePresets.json"
    ],
    "configurePresets": [
        {
            "name": "MSVC-VS-2022-x64",
            "displayName": "MSVC-VS-2022-x64",
            "description": "Ninja Multi-Config Build",
            "inherits": [
               "CustomizableBase"
            ],
            "generator": "Ninja Multi-Config",
            "binaryDir": "${sourceParentDir}/${sourceDirName}Build",
            "cacheVariables": {
                "CMAKE_VS_VERSION_RANGE": "[17.0,18.0)",
                "CMAKE_CONFIGURATION_TYPES": "Debug;Release"
            }
        }
    ],
    "buildPresets": [
        {
            "name": "Debug",
            "displayName": "Debug",
            "configurePreset": "MSVC-VS-2022-x64",
            "configuration": "Debug"
        },
        {
            "name": "Release",
            "displayName": "Release",
            "configurePreset": "MSVC-VS-2022-x64",
            "configuration": "Release"
        }
    ]
}

用户可以在本地修改

CustomizableBase
预设并添加
ACTIVE_SUBSETS
变量:

CMakeCustomizedPresets.json(已修改):

{
    "version": 5,
    "configurePresets": [
        {
            "name": "CustomizableBase",
            "description": "Here you could add cache variables, environment variables which you want additionally to see in the predefined presets",
            "cacheVariables": {
                "ACTIVE_SUBSETS": "A;B;C"
            }
        }
    ]
}

因此使用

MSVC-VS-2022-x64
预设进行配置将使用该变量。

注意,如果您想允许用户自定义预设的

binaryDir
字段,您需要从
MSVC-VS-2022-x64
文件中的
CMakePresets.json
预设中删除该字段,并将该字段添加到
CustomizableBase
中的
CMakeCustomizablePresets.json
预设中文件。否则,
MSVC-VS-2022-x64
预设中的字段值将无条件覆盖从
CustomizableBase
预设继承的值。

© www.soinside.com 2019 - 2024. All rights reserved.