具有多个 exe 和 lib 的 zig 项目

zig project with multiple exes and libs

我想设置一个 zig 项目来构建多个可执行文件和静态库。这是我想到的结构:

build.zig
scr/
    exe0/
        depends on lib0, lib1
    exe1/
        depends on lib1
    lib0/
    lib1/

我认为一种方法是在单个 build.zig 中描述所有这些,方法如下:

const lib0 = b.addStaticLibrary("lib0", "src/lib0/index.zig");
const lib1 = b.addStaticLibrary("lib1", "src/lib1/index.zig");

const exe0 = b.addExecutable("exe0", "src/exe0/main.zig");

exe0.linkLibrary(lib0);
exe0.linkLibrary(lib1);

const exe1 = b.addExecutable("exe1", "src/exe1/main.zig");
exe1.linkLibrary(lib1);

这样好吗?是否可以在单独的文件中描述 exe 和 lib?在那种情况下,你如何 link 他们?

编辑:我想我真的不需要静态库,实际上可以使用包来代替。我猜这会更像锯齿形。不过,我仍然对静态库方法感兴趣。

为了能够使用静态库方法,您需要明确设计整个 public 接口以使用 C ABI。这是非常严格的(例如,您甚至不能直接在 API 边界使用切片)并且如果您没有以某种方式从这种做法中获得任何其他好处,您应该使用包,或者更简单地说,只是@import() 使用相对路径的文件。

关于拆分 build.zig 文件:如果您愿意,可以在每个项目中创建构建器函数,以便每个项目都可以定义自己的详细信息(如果您确实需要的话)。不过,我还没有看到人们在野外这样做。

如果您想要一个将一些依赖关系联系在一起的强大 build.zig 文件的示例,请查看 Zig showdown: https://github.com/zig-community/Zig-Showdown