I love CMake. The new presets feature is really powerful, and super helpful, but I still use a small Makefile wrapping commonly used cmake commands and doing a couple of configuration things that as of now aren’t possible with just native CMake code.
There are a couple of features I think could be added to CMake presets that would almost entirely mitigate the need for any external “wrapping” scripts or tools:
- Conditional values – short-circuiting sets of possible values for environment variables, and possibly other fields. I’m imagining something like this:
"configurePresets": [
{
"name": "base",
"hidden": true,
"generator": [
{
"condition": { "type": "equals", "lhs": "${hostSystemName}", "rhs": "Darwin" },
"value": "Xcode"
},
{
"condition": { "type": "equals", "lhs": "${hostSystemName}", "rhs": "Windows" },
"value": "Visual Studio 16 2019"
}
{
"condition": "default",
"value": "Ninja"
}
]
}
]
If this would only be possible for setting environment variables, then I would also love the generator field to allow macro expansion, because my personal use case of this feature would be setting the generator, like is shown above.
- Command presets – saved sets of calls to either
cmake -E
orcmake -P
, for example:
"commandPresets": [
{
"name": "myScript",
"type": "script",
"script": "${sourceDir}/scripts/myScript.cmake",
"environmentVariables": {
"input1": "someData"
},
"workingDirectory": "${sourceDir}"
},
{
"name": "myCommand",
"type": "command",
"command": "make_directory",
"arguments": "${sourceDir}/Builds"
}
]
- It would be really helpful to have a presets macro that expands to the number of processors/cores on the current machine, I would use it like so:
"buildPresets": [
{
"name": "base",
"hidden": true,
"jobs": "${numCores}"
}
]
- Options in build and configure presets for writing the output to a file (similar to what’s available for test presets, akin to calling
cmake ... | tee myLog.log
)
Thanks for your consideration!