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 從公開儲存庫中收錄這些內容。

檢舉或申請下架