I really liked the COBOL comparison. It's a real pity that nothing came out of their effort to use Lua[1] for the build language.
[1]: https://cmake.org/pipermail/cmake/2007-November/017971.html
[1]: https://cmake.org/pipermail/cmake/2007-November/017971.html
CMake feels very "stringly typed", worse so than shell. For instance, the definition of if conditions: 'True if the constant is 1, ON, YES, TRUE, Y, or a non-zero number. False if the constant is 0, OFF, NO, FALSE, N, IGNORE, NOTFOUND, the empty string, or ends in the suffix -NOTFOUND. Named boolean constants are case-insensitive. If the argument is not one of these constants, it is treated as a variable.'
CMake has variables, and something vaguely like dictionaries, but the syntax again seems very string-like, with a SET() function and the <name> PROPERTY <name> syntax.
And on the flip side, CMake retains many of the quoting and argument splitting problems from shell scripting, without the well-established solutions for those.
In general, CMake seems like an exercise in minimal syntax: "can we build a language with no operators or symbols?". The result feels wrong in the same way COBOL does.
If you can treat CMake as a completely declarative language, it more or less works. However, the moment you have to actually use it as a programming language, it becomes painful.
I'd rather have shell scripts than CMake, and that says a lot.