Peter make is established but not the final solution I think.
Make have several problems, starting with a huge lack of clear documentation about what is portable.
build shell script are very readable but get hard to read and maintain if the task becomes more complex. And they are not portable between Win and Unix systems.
build shell scripts are non-portable, and are hard to get correct. Overall, shell scripts sucks more than make for that use case.
CMake seems cool and well-thought.
Cmake have a huge complexity problem.
SCons and Jam seem interesting, too
I think you can consider Jam as obsolete. SCons though gains popularity I think, but it requires python, and AFAIK interacts poorly with GNU/Linux distributions (usually those have the pkgconfig thing). Which applies to CMake too, even if they improved the situation, now you can import the .pc files, but it's not really thought for that (I think cmake was 1st thought for windows users).
autoconf/automake seems not so good now that we have CMake.
autotools is an horror I'll be happy to forget it exists.
For small stuff, I tend to just write my own Ninja files myself. It is surprisingly easy, the doc is very clean, and I'm pretty happy with that, even if it is not what Ninja devs recommends (but I'm not someone which just obeys).
Over the years i tried out and had to work with multiple ones(next to the above tools like gradle, ninja, etc)
did you really used ninja directly, or did you just used some ninja generator? I'm asking because... well... meson only supports ninja AFAIK. And if you used it, did you kept in mind that ninja is meant to be generated, and people like me writting it directy are just weird (and probably pretty rare) nerds.