tup is the only new build system I'm aware of that successfully innovates on build correctness. It snoops file system calls while running your build commands, so it can tell if your declared dependency structure doesn't match your actual dependency structure. It also notices when you change your build commands, and will delete old build objects that would no longer be produced by the new commands.
We used it to replace gulp in a medium size node/javascript project, and it absolutely destroys gulp in terms of efficiency and correctness. The only downside is the lack of more community resources describing how to configure tup for non C projects.