Issues with CMake:
- The DSL is not very good. It needs proper functions, for one.
- Non-hermetic builds (also mentioned in this thread)
- No ability to easily query the build DAG
- Headers are not modelled properly (they should be a dictionary of paths -> paths, not a list of include directories)
- Build folders cannot reliably be used between configurations, leading to confusion and cache misses
- Everything is convention driven. It does not model the build graph properly.
- Globs do not work properly (maybe that has changed recently?)
- The cache is not portable across a network, or even between folders on the same machine
The C++ community deserves better!
Others in this thread have mentioned some modern alternatives:
- Buck Build (Facebook, Uber, AirBnB)
- Bazel (Google)
- Pants (Twitter)
- Please (Thought Machine)
It doesn't actually matter which of these succeeds. They all model the builds in such a way that you can easily transpile between them.