presets: Add json macro expand option for loading user config such as "WINDOWS_KIT_VERSION": "$json<${sourceDir}/CMakeUserPresets.json:vendor/configs/WINDOWS_KIT_VERSION>"
How about this design to loading config item from other JSON file @kyle.edwards
presets: Add json macro expand option for loading user config such as’
part of CMakePresets.json
preset
{
"environment": {
"WINDOWS_KIT_VERSION": "$json<${sourceDir}/CMakeUserPresets.json:vendor/configs/WINDOWS_KIT_VERSION>"
}
}
Use <> for avoid nested {} in the macro expansion
If nested macro expansion are allowed,
then we can directly use "WINDOWS_KIT_VERSION": "$json<${sourceDir}/CMakeUserPresets.json:vendor/configs/WINDOWS_KIT_VERSION>"
CMakeUserPresets.json
{
"vendor": {
"example.com/ExampleIDE/1.0": {
"autoFormat": false
},
"configs": {
"WINDOWS_KIT_VERSION": "10.0.19041.0"
}
}
}
CMakePresets.json
{
"version": 3,
"cmakeMinimumRequired": {
"major": 3,
"minor": 21,
"patch": 0
},
"configurePresets": [
{
"hidden": true,
"name": "default",
"displayName": "Default Config",
"description": "Default build using Ninja generator",
"generator": "Ninja",
"binaryDir": "${sourceDir}/build/default"
},
{
"hidden": true,
"name": "ninja-multi",
"inherits": "default",
"displayName": "Ninja Multi-Config",
"description": "Default build using Ninja Multi-Config generator",
"generator": "Ninja Multi-Config"
},
{
"name": "windows-kit-version",
"environment": {
"WINDOWS_KIT_VERSION": "$json<${sourceDir}/CMakeUserPresets.json:vendor/configs/WINDOWS_KIT_VERSION>"
}
},
{
"hidden": true,
"name": "windows-only",
"inherits": ["ninja-multi", "windows-kit-version", "windows-kit-version-user"],
"displayName": "Windows-only configuration",
"description": "This build is only available on Windows",
"environment": {
"WINDOWS_KITS": "C:\\Program Files (x86)\\Windows Kits\\10\\",
"VS2015": "$penv{VS140COMNTOOLS}..\\.."
},
"condition": {
"type": "equals",
"lhs": "${hostSystemName}",
"rhs": "Windows"
}
},
{
"name": "vs2015",
"inherits": "windows-only",
"environment": {
"INCLUDE": "$env{VS2015}\\VC\\INCLUDE;$env{VS2015}\\VC\\ATLMFC\\INCLUDE;$env{WINDOWS_KITS}\\include\\$env{WINDOWS_KIT_VERSION}\\ucrt;$env{WINDOWS_KITS}\\include\\$env{WINDOWS_KIT_VERSION}\\shared;$env{WINDOWS_KITS}\\include\\$env{WINDOWS_KIT_VERSION}\\um;$env{WINDOWS_KITS}\\include\\$env{WINDOWS_KIT_VERSION}\\winrt;",
"PATH_BASE": "$env{VS2015}\\Common7\\IDE\\;$env{VS2015}\\VC\\BIN;$env{VS2015}\\Common7\\Tools;C:\\WINDOWS\\Microsoft.NET\\Framework\\v4.0.30319;C:\\Program Files (x86)\\HTML Help Workshop;$env{WINDOWS_KITS}\\bin\\$env{WINDOWS_KIT_VERSION}\\x86;$env{WINDOWS_KITS}\\bin\\x86;$penv{PATH}",
"LIB":"$env{VS2015}\\VC\\LIB;$env{VS2015}\\VC\\ATLMFC\\LIB;$env{WINDOWS_KITS}\\lib\\$env{WINDOWS_KIT_VERSION}\\ucrt\\x86;$env{WINDOWS_KITS}\\lib\\$env{WINDOWS_KIT_VERSION}\\um\\x86;",
"LIBPATH":"C:\\WINDOWS\\Microsoft.NET\\Framework\\v4.0.30319;$env{VS2015}\\VC\\LIB;$env{VS2015}\\VC\\ATLMFC\\LIB;$env{WINDOWS_KITS}\\UnionMetadata;$env{WINDOWS_KITS}\\References;\\Microsoft.VCLibs\\14.0\\References\\CommonConfiguration\\neutral;"
}
},
{
"name": "vs2015-qt",
"inherits": "vs2015",
"environment": {
"QTDIR": "C:\\Qt\\Qt5.9.9\\5.9.9\\msvc2015",
"PATH": "$env{QTDIR};$env{PATH_BASE}"
}
}
],
"buildPresets": [
{
"name": "vs2015-qt-Debug",
"configurePreset": "vs2015-qt",
"configuration": "Debug"
},
{
"name": "vs2015-qt-Release",
"configurePreset": "vs2015-qt",
"configuration": "Release"
}
],
"testPresets": [
{
"name": "default",
"configurePreset": "default",
"output": {"outputOnFailure": true},
"execution": {"noTestsAction": "error", "stopOnFailure": true}
}
],
"vendor": {
"example.com/ExampleIDE/1.0": {
"autoFormat": false
}
}
}