Zig Build System

mohitmishra786/low-level-dev-skills/skills/zig/zig-build-system

作者 mohitmishra786bdc58472fa9f无许可证253 个星标收录于 2026年10月9日更新于 2026年10月9日仓库3个月前更新

Zig build system skill for multi-file Zig projects. Use when writing or debugging build.zig files, adding executables or libraries, integrating C source files, configuring build-time options, running tests with zig build test, or managing build.zig.zon package manifests. Activates on queries about build.zig, b.addExecutable, addCSourceFiles, b.option, zig build, build.zig.zon, or Zig package management.

AI 生成的概览

指导编写和调试 Zig 的 build.zig 文件,涵盖目标、C 源码、选项、测试与包清单。

功能
该技能为多文件 Zig 项目编写 build.zig 文件提供参考指导。内容涵盖项目初始化、可执行文件与库目标、添加 C 源文件和系统库、构建期选项、模块系统、自定义构建步骤以及 build.zig.zon 包清单。它还指向一份随附的进阶 build.zig 模式参考文档。
适用场景
适用于编写或调试 build.zig 文件、添加可执行文件或库、集成 C 源码、定义构建期选项、运行 zig build test,或管理 build.zig.zon 依赖时。
运行要求
不附带脚本,仅为说明文档加一份参考文档。按其中描述操作构建文件需要 Zig 工具链,获取包依赖需要网络访问。

Zig Build System

Purpose

Guide agents through writing build.zig files: executables, libraries, C source integration, build options, test configuration, and build.zig.zon package manifests.

Triggers

  • "How do I set up a build.zig file?"
  • "How do I add a C library to a Zig project?"
  • "How do I define build-time options in Zig?"
  • "How do I run Zig tests with zig build test?"
  • "What is build.zig.zon and how do I use it?"
  • "How do I add a Zig package dependency?"

Workflow

1. Project initialization

bash
# Initialize a new projectmkdir myproject && cd myprojectzig init          # creates src/main.zig and build.zig
# Buildzig build
# Runzig build run
# Testzig build test

2. build.zig structure

zig
const std = @import("std");
pub fn build(b: *std.Build) void {    // Standard options (--optimize, --target)    const optimize = b.standardOptimizeOption(.{});    const target = b.standardTargetOptions(.{});
    // Executable    const exe = b.addExecutable(.{        .name = "myapp",        .root_source_file = b.path("src/main.zig"),        .target = target,        .optimize = optimize,    });
    // Install step (zig build → copies to zig-out/bin/)    b.installArtifact(exe);
    // Run step (zig build run)    const run_cmd = b.addRunArtifact(exe);    run_cmd.step.dependOn(b.getInstallStep());    if (b.args) |args| {        run_cmd.addArgs(args);    }    const run_step = b.step("run", "Run the app");    run_step.dependOn(&run_cmd.step);
    // Test step (zig build test)    const unit_tests = b.addTest(.{        .root_source_file = b.path("src/main.zig"),        .target = target,        .optimize = optimize,    });    const run_unit_tests = b.addRunArtifact(unit_tests);    const test_step = b.step("test", "Run unit tests");    test_step.dependOn(&run_unit_tests.step);}

3. Libraries

zig
// Static libraryconst lib = b.addStaticLibrary(.{    .name = "mylib",    .root_source_file = b.path("src/mylib.zig"),    .target = target,    .optimize = optimize,});b.installArtifact(lib);
// Shared libraryconst shared_lib = b.addSharedLibrary(.{    .name = "mylib",    .root_source_file = b.path("src/mylib.zig"),    .target = target,    .optimize = optimize,    .version = .{ .major = 1, .minor = 0, .patch = 0 },});b.installArtifact(shared_lib);
// Link library into executableexe.linkLibrary(lib);

4. Adding C source files

zig
// Single C fileexe.addCSourceFile(.{    .file = b.path("src/legacy.c"),    .flags = &.{ "-std=c11", "-Wall", "-Wextra" },});
// Multiple C filesexe.addCSourceFiles(.{    .files = &.{        "src/a.c",        "src/b.c",        "src/c.c",    },    .flags = &.{ "-std=c11", "-O2" },});
// Include directoriesexe.addIncludePath(b.path("include/"));exe.addIncludePath(.{ .cwd_relative = "/usr/local/include" });
// System librariesexe.linkSystemLibrary("curl");exe.linkSystemLibrary("ssl");exe.linkLibC();  // link libc (required if calling C stdlib)

5. Build-time options

zig
pub fn build(b: *std.Build) void {    // Boolean option    const enable_logging = b.option(        bool,        "logging",        "Enable debug logging",    ) orelse false;
    // Enum option    const Backend = enum { opengl, vulkan, software };    const backend = b.option(        Backend,        "backend",        "Rendering backend",    ) orelse .opengl;
    // Integer option    const max_connections = b.option(        u32,        "max-connections",        "Maximum concurrent connections",    ) orelse 64;
    // Pass to Zig code as compile-time constant    const options = b.addOptions();    options.addOption(bool, "enable_logging", enable_logging);    options.addOption(Backend, "backend", backend);    options.addOption(u32, "max_connections", max_connections);
    exe.root_module.addOptions("build_options", options);}

In Zig source:

zig
const build_options = @import("build_options");
pub fn main() void {    if (build_options.enable_logging) {        std.debug.print("Logging enabled\n", .{});    }}
bash
# Pass options on command linezig build -Dlogging=true -Dbackend=vulkan -Dmax-connections=256

6. Module system

zig
// Create a module (reusable across targets)const mymodule = b.addModule("mymodule", .{    .root_source_file = b.path("src/mymodule.zig"),});
// Use module in executableexe.root_module.addImport("mymodule", mymodule);
// Share module between exe and testsconst utils = b.addModule("utils", .{    .root_source_file = b.path("src/utils.zig"),});exe.root_module.addImport("utils", utils);unit_tests.root_module.addImport("utils", utils);

In Zig source:

zig
const utils = @import("utils");const mymodule = @import("mymodule");

7. Package management with build.zig.zon

zig
// build.zig.zon.{    .name = "myapp",    .version = "0.1.0",    .minimum_zig_version = "0.13.0",
    .dependencies = .{        .zig_clap = .{            .url = "https://github.com/Hejsil/zig-clap/archive/refs/tags/0.9.1.tar.gz",            .hash = "1220...",  // Run zig build to get the hash        },        .known_folders = .{            .url = "https://github.com/ziglibs/known-folders/archive/refs/heads/master.tar.gz",            .hash = "1220...",        },    },
    .paths = .{        "build.zig",        "build.zig.zon",        "src",        "LICENSE",        "README.md",    },}
zig
// build.zig — use the dependencyconst clap_dep = b.dependency("zig_clap", .{    .target = target,    .optimize = optimize,});exe.root_module.addImport("clap", clap_dep.module("clap"));
bash
# Fetch dependencies (creates zig-cache/packages/)zig build    # auto-fetches on first run
# Zig will print the hash if missing — copy it into build.zig.zon

8. Custom build steps

zig
// Code generation stepconst gen_step = b.addSystemCommand(&.{    "python3", "scripts/gen.py", "--output", "src/generated.zig",});exe.step.dependOn(&gen_step.step);
// Custom install stepconst install_config = b.addInstallFile(    b.path("config/default.toml"),    "share/myapp/config.toml",);b.getInstallStep().dependOn(&install_config.step);

For advanced build.zig patterns, see references/build-zig-patterns.md [blocked].

Related skills

  • Use skills/zig/zig-compiler for single-file builds and compiler flags
  • Use skills/zig/zig-cinterop for C library integration in build.zig
  • Use skills/zig/zig-cross for cross-compilation in build.zig
  • Use skills/build-systems/cmake when embedding Zig into a CMake project

来源与署名

来源:mohitmishra786/low-level-dev-skills位于skills/zig/zig-build-system提交bdc5847

许可证: 无许可证

内容归原作者所有。SourceWeft 从公开仓库中收录这些内容。

举报或申请下架