> - 在线浏览:<https://jiacai2050.github.io/x/zig-build/> ## 为什么写这本书? 系统级编程中的构建流程通常比较繁琐: - 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. **有向无环图(DAG)模型**:构建脚本负责在内存中声明依赖任务图,由多线程调度引擎执行并结合哈希指纹做增量缓存; 4. **编译单元与产物解耦**:通过 `std.Build.Module` 与 `std.Build.Step.Compile` 的分工,模块配置可以在静态库、动态库与测试目标间复用。 由于 Zig 处于快速迭代期(当前开发分支为 0.16.0),网络上较多旧版本(0.11、0.12 等)的代码片段已无法直接使用。本书梳理 Zig 构建系统的核心抽象、常用 API 以及底层执行机制,帮助读者掌握基于现代 Zig 的构建实践。 --- ## 本书内容组织 全书分为五个部分与附录: 1. **第一部分:来龙去脉与设计哲学** - 梳理构建工具的演进过程与痛点; - 介绍 Zig 构建系统的设计哲学与自包含工具链。 2. **第二部分:核心概念深度解析** - 配置期(Configuration)与执行期(Execution)生命周期; - 任务计算图抽象:`std.Build.Step` 与 DAG 拓扑; - 模块与产物解耦:`Module` vs `Step.Compile`; - 惰性路径:`LazyPath` 的设计与依赖推导; - 包管理模型:`build.zig.zon` 与 `.zig-cache` 缓存布局。 3. **第三部分:核心 API 全景与实战用法** - 编译选项解析与顶层 Step 注册; - 可执行文件、库与单元测试产物构建; - 模块命名空间管理与子模块导入(`addImport`); - C/C++ 互操作、头文件包含路径传播与头文件树导出; - 模板替换(`addConfigHeader`)与文件动态生成; - 依赖包消费(`b.dependency`)与自定义 Step 开发。 4. **第四部分:源码级底层运行机制** - Build Runner 的动态编译与调度流程; - `Step.Compile.make()` 拼装底层 CLI 命令细节; - 单体编译单元 ZCU 与跨模块 comptime 分析机制; - 内置 Clang 前端 C++ FFI 桥接(`ZigClang_main`)与链接器合并机制。 5. **第五部分:实战工程最佳实践** - 纯 Zig 应用程序工程范式; - Zig 与 C/C++ 混合编程结构; - 复杂第三方 C 库的移植实践(以 MariaDB Connector/C 为例); - 跨平台交叉编译与 GitHub Actions CI 流水线。 6. **附录** - `std.Build` 常用 API 速查表。 --- ## 环境与代码约定 - **Zig 版本**:基于 **Zig 0.16.0**。 - **实战示例代码**: 本书配套了 5 个完全独立的 Zig 0.16.0 示例工程,源码均位于项目的 `examples/` 目录,读者可直接点击链接浏览源码或在本地运行。复杂 C 库移植工程参考开源项目 [zig-mariadb-connector](https://github.com/jiacai2050/zig-mariadb-connector);源码分析基于 [Zig 官方 0.16.0 源码树](https://codeberg.org/ziglang/zig/src/tag/0.16.0)。 - **代码注释**:示例代码中的注释均使用英文,正文采用中文叙述。 --- ## 勘误与反馈 本书在写作过程中借助了 AI 工具。书中的实战示例均经过了本地与 CI 测试,但 AI 仍可能在原理解析或接口推导时出现幻觉。再加上 Zig 及其构建系统演进较快,个人精力与水平有限,书中难免会有疏漏或理解偏差。 如果你在阅读或实战中发现任何错误(代码无法运行、原理解释有误、文字错漏等),欢迎反馈与交流: - 在 GitHub 提交 Issue 或 PR:<https://github.com/jiacai2050/x> - 网页版每页右上角提供了编辑入口,也可以直接提交修改建议。 ## 加入我们 Zig 中文社区是一个开放的组织,我们致力于推广 Zig 在中文群体中的使用,有多种方式可以参与进来: 1. [供稿,分享](https://ziglang.cc/contributing "供稿,分享")自己使用 Zig 的心得 2. 改进 ZigCC 组织下的[开源项目](https://ask.ziglang.cc/github "开源项目") 3. 加入[微信群](https://ask.ziglang.cc/weixin "微信群")、[QQ 群](https://ziglang.cc/images/qq.webp)、[QQ 频道](https://ziglang.cc/images/qq-channel.webp)、[Telegram 群组](http://ask.ziglang.cc/telegram)、[Google Groups](https://groups.google.com/g/zigcc) 与更多 Zig 爱好者交流
Activity