build.zig に慣れる

2024/06/08に公開

zig-0.12.0 をきっかけに再び zig を使い始めようとしております。
zig でいつも戸惑う build 周りに特化して、メモ書きしていきます。

zig init

hello.

$ mkdir zig_hello
$ cd zig_hello
$ zig init
$ fd
build.zig
build.zig.zon
src\
src\main.zig
src\root.zig
$ zig build
$ .\zig-out\bin\zig_hello.exe
All your codebase are belong to us.
Run `zig build test` to run the tests.

最小まで削る

zig init は zon とか unittest とかの例もあるのだけど、
exe のビルドに必要な最小まで削ってみる。

build.zig
src\main.zig
build.zig
const std = @import("std");

pub fn build(b: *std.Build) void {
    const target = b.standardTargetOptions(.{});
    const optimize = b.standardOptimizeOption(.{});

    // *std.Build.Step.Compile を作る
    const exe = b.addExecutable(.{
        .name = "zig_hello",
        .target = target,
        .optimize = optimize,
        // std.Build.LazyPath
        .root_source_file = b.path("src/main.zig"), // zig のエントリーポイント
    });
    // ビルド対象に追加して zig-out に出てくるようにする
    b.installArtifact(exe);
}

c のライブラリとリンクする

TODO: raylib の例

https://ziglang.org/ja/learn/samples/#c相互運用性

build.zigcmake と似ていて、
まずCのコンパイルを通す(@cImport できるようにする)。
次にリンクを解決するという2段階で考えます(cやcppをコンパイルしてリンクする)。

Discussion