My preferred "build system":
Start with bash script.
Translate that to a tiny ninja script when it gets to be more than a page or two. (Ninja is technically a build system, but it is tiny and simple).
Translate that to a tiny python script that emits build.ninja when it gets to be more than a page or two. Not much more to it than globs and f-strings.
Overall that scales well, has no large dependencies (you can just dump a Ninja binary in the repo), and is fast.