Having normal procedural language for build automation is of course useful. That's for those 10% of cases when "standard" build DSL (make,CMake,etc.) simply do not have facilities.
But the rest of 90% tasks should have compact (easily readable) definitions.
I personally found that Premake5 has quite good balance for these tasks.
Premake files are plain .lua files and due to Lua syntax they are easily readable. And if needed you can call from them procedures defined in again Lua.
So typical project (multiplatform) definition looks pretty readable, for example one project from Sciter SDK:
90% of Zig projects can get away with using the defaults from `zig init-exe` or `zig init-lib`.
Actually, many of them probably don’t even need the most of the build system at all if they’re intended only to be imported by other zig projects as libraries.
I’d argue that Zig definitely makes the easy case trivial and the hard case possible here.
But the rest of 90% tasks should have compact (easily readable) definitions.
I personally found that Premake5 has quite good balance for these tasks.
Premake files are plain .lua files and due to Lua syntax they are easily readable. And if needed you can call from them procedures defined in again Lua.
So typical project (multiplatform) definition looks pretty readable, for example one project from Sciter SDK:
https://github.com/c-smile/sciter-js-sdk/blob/main/premake5....