Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Zig 构建系统指南

为什么写这本书?

系统级编程中的构建流程通常比较繁琐:

  • C/C++ 依赖 Autotools、Make、CMake 等工具,跨平台配置和交叉编译环境搭建成本较高;
  • 现代语言(如 Rust Cargo、Go)统一了语言内的包管理,但遇到 C/C++ 依赖混编、代码生成或交叉编译时,仍需通过 build.rs 或 CGo 脚本调用外部工具链。

Zig 提供了另一种思路:

  1. 直接用 Zig 编写构建逻辑(No DSL, Just Zig):不再引入专用的构建脚本语言,构建逻辑直接在 build.zig 中使用标准 Zig 编写;
  2. 自包含工具链:Zig 二进制内嵌了 Clang 编译器、LLD 链接器以及主流平台的 libc 符号库,无需额外安装目标平台的外部交叉编译环境;
  3. Maker 与 Configurer 双进程架构:将构建图的配置生成(短命 configurer 进程)与任务调度执行(maker 进程)解耦;
  4. 配置缓存与污染追踪(Cache Poisoning):构建配置支持二进制缓存;只有当脚本检测外部非受控环境时才标记污染降级,兼顾性能与纯函数确定性;
  5. 增量二进制缓存与 BSP 标准:缓存 Manifest 采用紧凑二进制格式(提供 zig cache-cat 诊断),并确立官方 Build Server Protocol 规范 IDE 交互。

由于 Zig 处于快速迭代期,网络上较多旧版本的代码片段已无法直接使用。本书梳理 Zig 构建系统的核心抽象、常用 API 以及底层执行机制,帮助读者系统掌握现代 Zig 构建实践。为方便读者离线阅读,提供 pdf、epub 版本。


本书内容组织

全书分为五个主题与附录:

  1. 来龙去脉与设计哲学(philosophy/)
    • 梳理构建工具的演进过程与痛点;
    • 介绍 Zig 构建系统的设计哲学与自包含工具链。
  2. 核心概念解析(concepts/)
    • 配置期(Configuration)与执行期(Execution)生命周期及双进程隔离;
    • 任务计算图抽象:std.Build.Step 与 DAG 拓扑;
    • 惰性路径:LazyPath 的设计与数据流驱动;
    • 模块与产物解耦:Module vs Step.Compile;
    • 包管理模型:build.zig.zon 与二进制缓存布局。
  3. 核心 API 与实战用法(api/)
    • 编译选项解析与顶层 Step 注册(b.standardTargetOptions 与 b.step);
    • 可执行文件、库与单元测试产物构建(addExecutable、addLibrary、addTest、addObjCopy);
    • 模块命名空间管理与子模块导入(createModule、addModule、addImport);
    • C/C++ 互操作、头文件包含路径传播与头文件树导出(addTranslateC、linkLibrary);
    • 代码生成、配置常量与源码同步(ConfigHeader、Options、WriteFiles、UpdateSourceFiles);
    • 第三方依赖引入与消费(b.dependency、--fork 与系统包集成);
    • 编写自定义 Step 与扩展构建管线(Host Tool 辅助模式与系统命令调用)。
  4. 工程实践(practices/)
    • 纯 Zig 应用程序工程范式;
    • Zig 与 C/C++ 混合编程结构;
    • 复杂第三方 C 库的移植实践(以 MariaDB Connector/C 为例);
    • 跨平台交叉编译与 GitHub Actions CI 流水线。
  5. 底层运行机制(internals/)
    • 构建自举与双进程架构:Maker 与 Configurer 源码流转;
    • Step.Compile 到子进程拼装细节;
    • 单体编译单元 ZCU 与跨模块 comptime 分析机制;
    • 内置 Clang 前端 C++ FFI 桥接(ZigClang_main)与工具链解耦。
  6. 附录(appendix/)
    • std.Build 常用 API 速查表;
    • 从 Zig 0.16 迁移到 0.17 构建指南。

环境与代码约定


勘误与反馈

书中的所有代码均经过了本地与 CI 测试,并利用 AI 润色,但 AI 存在幻觉,再加上 Zig 及其构建系统演进较快,个人精力与水平有限,书中难免会有疏漏或理解偏差。

如果你在阅读或实战中发现任何错误(代码无法运行、原理解释有误、文字错漏等),欢迎反馈与交流: