我有这个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
。不幸的是,这两个文件似乎总是被加载。
类似于缓存变量,环境变量和二进制目录也应该能够被覆盖。
预设一旦定义,将无法被覆盖,只有定义新的预设时才可以继承。
如果您想要在 中定义一个预设
CMakePresets.json
并允许用户通过单独的文件自定义其某些属性,那么您可以继承其他预设,这些预设将位于单独的文件中。该单独的文件不能是CMakeUserPresets.json
,因为该文件中的预设不能被 中的预设继承CMakePresets.json
。但您可以为此目的创建任何其他文件:CMakeCustomizablePresets.json:
并将该文件包含到
CMakePresets.json
:CMakePresets.json:
用户可以
CustomizableBase
在本地修改预设并添加ACTIVE_SUBSETS
变量:CMakeCustomizablePresets.json(已修改):
因此使用
MSVC-VS-2022-x64
预设进行配置将使用该变量。请注意,如果您想要允许用户自定义
binaryDir
预设的字段,则需要从文件MSVC-VS-2022-x64
中的预设中删除该字段CMakePresets.json
,并将该字段添加到文件CustomizableBase
中的预设中CMakeCustomizablePresets.json
。否则,预设中字段的值MSVC-VS-2022-x64
将无条件覆盖从预设继承的值CustomizableBase
。