Ninja is a fine tool but it requires an higher level language to generate it's build files.
Cmake is just horrible, I just cannot stand it. I choose Meson instead and I am quite happy with it. Meson developers focus a lot on doing the right design decisions. They keep the language very simple and offer mostly one logical way to do a thing and Meson ensure it works right in every circumstance. Yet it offers advanced options when they are required but they are always well thought out.
If you compare meson to make at first you may think make is more flexible but ultimately it leaves to you many problems it doesn't solve and it turns out to be inadequate.
With make, declare automatically dependencies from header files? You are alone, that's your problem. There are some tricks using GCC but they looks like hacks. Maintain projects build logic across subfolders? That's your problem. Make only provide a very rough, inadequate mechanism.
Want to do parallel build by respecting dependencies across folder? Sorry, that's your problem but it may work using some tricks.
Want to build out of tree? Hmmm not supported in a standard idiomatic way. You need to use tricks.
How you create a static library in a cross-platform way? That's your problem. The same for shared libraries.
Personally I think that make is an obsolete tool whose design is inadequate very much like CVS that was replaced by git.
To me the only downside of Meson is that it requires python but I can accommodate with that.