zig-build-system — скилл для Claude Code: сборка Zig-проектов
Помогает агенту писать и отлаживать build.zig: исполняемые файлы, библиотеки, C-исходники, опции сборки и тесты.
npx skills add mohitmishra786/low-level-dev-skills --skill zig-build-system -a claude-codeЧто делает zig-build-system
Скилл ведёт агента по build.zig шаг за шагом. Он подсказывает, как объявить исполняемый файл через b.addExecutable, подключить статическую или разделяемую библиотеку, добавить шаги run и test. Для проектов с C-кодом есть готовые примеры: addCSourceFile, addCSourceFiles, пути включения и linkSystemLibrary.
Отдельный блок — опции времени сборки. Агент покажет, как объявить b.option для bool, enum и целых чисел, а потом передать их в код Zig через b.addOptions и @import("build_options"). Зависимости пакетов описаны в build.zig.zon: имя, версия, minimum_zig_version, ссылки и хеши. Хеш Zig печатает сам, если его не хватает — его нужно скопировать в манифест.
Есть раздел про модули (b.addModule) и пользовательские шаги, например запуск внешней команды через addSystemCommand перед сборкой. Учтите: для сборки нужен установленный компилятор Zig, а в примерах с C — линковка libc через linkLibC(). Если проект собирается из одного файла без build.zig, этот скилл не нужен — для таких случаев в наборе есть отдельный скилл про компилятор.
Какие задачи решает
- написать
build.zigс нуля для проекта из нескольких файлов - добавить C-исходники и системные библиотеки в сборку Zig
- объявить опции сборки и пробросить их в код как константы
- настроить шаг
zig build testдля юнит-тестов - подключить пакетную зависимость через
build.zig.zon
Примеры запросов агенту
- Помоги написать
build.zigдля проекта сsrc/main.zigи тестами - Добавь в сборку C-файл
src/legacy.cи подключи libc - Как объявить опцию
backendчерезb.optionи передать её в код?
Как установить zig-build-system
1Через Skills CLI (Vercel)
npx skills add mohitmishra786/low-level-dev-skills --skill zig-build-system -a claude-code2Вручную: положить файлы
~/.claude/skills/zig-build-system/SKILL.mdПапка скилла целиком; для одного проекта — .claude/skills/zig-build-system/
1Через Skills CLI (Vercel)
npx skills add mohitmishra786/low-level-dev-skills --skill zig-build-system -a codex2Вручную: положить файлы
.agents/skills/zig-build-system/SKILL.mdДля всех проектов — ~/.agents/skills/
1Через Skills CLI (Vercel)
npx skills add mohitmishra786/low-level-dev-skills --skill zig-build-system -a cursor2Вручную: положить файлы
.cursor/skills/zig-build-system/SKILL.mdCursor читает и .agents/skills/, и .claude/skills/
1GitHub CLI
gh skill install mohitmishra786/low-level-dev-skills zig-build-system2Вручную: положить файлы
.github/skills/zig-build-system/SKILL.md1Через Skills CLI (Vercel)
npx skills add mohitmishra786/low-level-dev-skills --skill zig-build-system -a gemini-cli2Командой платформы
gemini skills install https://github.com/mohitmishra786/low-level-dev-skills --path skills/zig/zig-build-systemВручную: положить файлы
.devin/skills/zig-build-system/SKILL.mdСтарый путь .windsurf/skills/ тоже читается
Через Skills CLI (Vercel)
npx skills add mohitmishra786/low-level-dev-skills --skill zig-build-system -a opencodeClaude.ai
Упакуйте папку в zip и загрузите в Settings → Capabilities → Skills
По шагам, с командами для каждой платформы: Как установить скилл в Claude Code: пять способов
Вопросы о zig-build-system
Как установить zig-build-system в Claude?
Выполните npx skills add mohitmishra786/low-level-dev-skills --skill zig-build-system -a claude-code. После этого файл скилла окажется в ~/.claude/skills/zig-build-system/SKILL.md.
Что делает zig-build-system?
Проводит агента по написанию build.zig: исполняемые файлы, библиотеки, C-исходники, опции сборки, тесты и манифест build.zig.zon.
С какими ещё скиллами он связан?
Автор указывает skills/zig/zig-compiler для сборки одного файла и флагов компилятора и skills/zig/zig-cinterop для интеграции C-библиотек.
Исходный текст
SKILL.md · MIT
---
name: zig-build-system
description: 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.
---
# 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 project
mkdir myproject && cd myproject
zig init # creates src/main.zig and build.zig
# Build
zig build
# Run
zig build run
# Test
zig 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 library
const lib = b.addStaticLibrary(.{
.name = "mylib",
.root_source_file = b.path("src/mylib.zig"),
.target = target,
.optimize = optimize,
});
b.installArtifact(lib);
// Shared library
const 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 executable
exe.linkLibrary(lib);
```
### 4. Adding C source files
```zig
// Single C file
exe.addCSourceFile(.{
.file = b.path("src/legacy.c"),
.flags = &.{ "-std=c11", "-Wall", "-Wextra" },
});
// Multiple C files
exe.addCSourceFiles(.{
.files = &.{
"src/a.c",
"src/b.c",
"src/c.c",
},
.flags = &.{ "-std=c11", "-O2" },
});
// Include directories
exe.addIncludePath(b.path("include/"));
exe.addIncludePath(.{ .cwd_relative = "/usr/local/include" });
// System libraries
exe.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 line
zig 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 executable
exe.root_module.addImport("mymodule", mymodule);
// Share module between exe and tests
const 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 dependency
const 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 step
const gen_step = b.addSystemCommand(&.{
"python3", "scripts/gen.py", "--output", "src/generated.zig",
});
exe.step.dependOn(&gen_step.step);
// Custom install step
const 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](references/build-zig-patterns.md).
## 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 · MIT · mohitmishra786/low-level-dev-skills