如何在已经是导入模块的依赖项的模块上正确添加导入,我这样做:
const tkm = b.dependency("tokamak", .{
.target = target,
.optimize = optimize,
});
exe.root_module.addImport("tokamak", tkm.module("tokamak"));
var it = tkm.module("tokamak").iterateDependencies(null, false);
while (it.next())|dep| {
if(std.mem.eql(u8, dep.name, "httpz")) {
exe.root_module.addImport("httpz", dep.module);
}
}
也许有更优雅的方式?
Просто хочу знать можно ли сделать это лучше
计划为项目提供 ID 和版本,以便将来更好地处理这个问题:https://github.com/ziglang/zig/issues/14288
现在,您可以使用完全相同的 url 和哈希将依赖项添加到 build.zig.zon 中,并使用完全相同的参数调用
b.dependency()
,它将解析为相同的依赖项:
在您的 build.zig.zon 中:
.dependencies = .{
.tokamak = .{ ... },
.httpz = .{
// make sure this url and hash are the same as the one in tokmak's build.zig.zon, and update this when you update tokmak
.url = "git+https://github.com/karlseguin/http.zig?ref=master#6e45041ef1e0ed8d3e36e15ccb459a3392571f7f",
.hash = "1220c47311099ba5705d906d11927bc222e9562830bcc32b6d638e10124371f4eeb6",
},
},
在您的 build.zig 中:
const tkm = b.dependency("tokamak", .{ .target = target, .optimize = optimize });
// make sure the arguments passed in ".{ }" are the same that tokamak passes to httpz in its build.zig
const httpz = b.dependency("httpz", .{ .target = target, .optimize = optimize });
只要哈希值相同并且传递给
b.dependency()
的参数相同,b.dependency()
将在您的项目中返回与 httpz 中相同的指针。
或者,您可以从托卡马克的构建器中提取 httpz 依赖项,而不是将其复制到您自己的 build.zig.zon 中:
const tkm = b.dependency("tokamak", .{ .target = target, .optimize = optimize });
// make sure the arguments passed in ".{ }" are the same that tokamak passes to httpz in its build.zig
const httpz = tkm.builder.dependency("httpz", .{ .target = target, .optimize = optimize });