具有多个ex和lib的zig项目

  • 本文关键字:lib zig 项目 ex zig
  • 更新时间 :
  • 英文 :


我想建立一个zig项目,该项目可以构建几个可执行文件和静态库。这就是我心目中的结构:

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

我认为有一种方法可以做到这一点,那就是在一个buildzig中使用这样的东西来描述所有这些:

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);

这是个好办法吗?是否可以在单独的文件中描述ex和lib?在这种情况下,你如何将它们联系起来?

编辑:我想我其实并不需要静态库,而是可以使用包。我想这会更像Z字形。不过,我仍然对静态lib方法感兴趣。

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

关于拆分buildzig文件:如果你愿意,你可以在每个项目中创建构建器函数,这样每个项目都可以定义自己的细节,如果你真的愿意的话。不过,我还没有见过有人在野外这样做。

如果你想要一个强大的build.zig文件的例子,它将一些依赖关系联系在一起,请看一下zig决战:https://github.com/zig-community/Zig-Showdown

最新更新