微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

具有多个 exe 和 libs 的 zig 项目

如何解决具有多个 exe 和 libs 的 zig 项目

我想设置一个构建多个可执行文件和静态库的 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 和 libs?在这种情况下,您如何链接它们?

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

解决方法

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

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。