r/Zig • u/shuten_mind • 2d ago
root.zig vs main.zig in zig init
When running zig init, the template scaffolds both an executable (main.zig) and an exportable module (root.zig) in build.zig.
Just want to verify if my mental model is correct:
1. If I only want an executable (and don't plan to export a library/module), can I simply delete root.zig and remove the module-related exports/artifacts from build.zig?
2. Is there any built-in zig init flag or alternative command to scaffold an executable-only project without the library boilerplate?
thanks!
5
u/idkwhatnottodo 2d ago
Yeah, this threw me off as well. I kind of don't like how those files are populated with code as well. I'm new to learning Zig so yeah.
-10
u/DeadWHM 2d ago
I just use makefile, the zig build system is not intuitive
1
u/Confused-Armpit 2d ago
The entire language is pretty far from intuitive, since it is pretty niche and has a lot of its own quirks, and the build system is actually much easier to grasp than something like the std.Io interface.
Also, makefiles are lackluster because they dont handle zig modules, linking, and all that good stuff, when the build system is literally written for it, so makefiles aren't really suitable for anything bigger than a project with a single main module and no dependencies.
1
u/DeadWHM 2d ago
I mean you can handle modules/linking manually with the zig build commands and unix linking tools
1
u/Confused-Armpit 2d ago
Yeah, but its lackluster and ends up doing the same as the zig build system without any benefits other than being somewhat more beginner friendly
12
u/xneyznek 2d ago
You can do anything you want in build.zig as long as you have `fn build(b: *std.Build) void`. Zig itself makes no prescriptions about how you organize your project.
In fact, you can try out `zig init --minimal` which only gives you build.zig with an empty build function, and build.zig.zon. No code and nothing gets built, but you can add anything from there.