One thing that annoys me about CMake is that there is a bunch of functionality in odd places. For example, list TRANSFORM only works for some string functions, or more recently with predicates as well. But the subset of string functions seems arbitrary.
I know there has been exploration of creating a descriptive language for CMake, like other build systems have (e.g. Visual Studio projects).
But has there been any exploration effort to take the sort of approach CPP2 takes to C++? Exploring breaking-changes for the sake of seeing what can be gotten away with to preserve compatibility, whilst considering getting rid of some legacy obstacles that might make a lot of other odd-tricks irrelevant. Not introducing more hacks to patch over old problems. Even if it is not CMake itself.
Another thing that annoys me, is that predicates are a bit cumbersome. You have to name each function, as CMake has no anonymous functions.
If there were anonymous functions, a lot of functions (string, list, cmake_path, file) could be simplified a lot?
Perhaps yet another thing would be supporting some additional types, as others have asked for. Specifically tuples or dictionaries. Even if they are still represented as lists of an even number of elements. With alternating key/value elements (as some current CMake functions already require anyway).