我有这个
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也应该能够被覆盖。
预设一旦定义,就无法覆盖。只有定义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
预设继承的值。