我想要设置一个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);这是个好办法吗?是否有可能在单独的文件中描述前夫和李?在这种情况下你是怎么联系他们的?
编辑:我想我并不真的需要静态库,而是可以实际使用包。就像我想的那样。不过,我仍然对静态库方法感兴趣。
发布于 2021-07-15 19:38:10
为了能够使用静态库方法,您需要显式地设计整个公共接口以使用C。这是相当紧缩的(例如你甚至不能直接在API边界使用切片),如果你没有从这个实践中获得任何其他好处,你应该使用包,或者更简单地说,只是使用一个相对路径的@import()文件。
关于拆分build.zig文件:如果您愿意,可以在每个项目中创建构建器函数,以便每个项目都可以定义自己的详细信息(如果确实需要的话)。不过,我还没在野外见过这样的人。
如果您想要一个连接几个依赖关系的强大build.zig文件的示例,请查看Zig摊牌:https://github.com/zig-community/Zig-Showdown。
https://stackoverflow.com/questions/68390247
复制相似问题