我正在学习 zig 并坚持使用它的导入系统。 这是我的项目树:
├── build.zig
├── build.zig.zon
└── src
├── foo
│ ├── bar.zig
│ └── foo.zig
├── main.zig
├── root.zig
└── shared
├── shared.zig
└── util.zig
Zig(还没有?)有内置模块/包系统,所以如果我导入
const util = @import("../shared/util.zig");
在 bar.zig 内并运行测试:
zig test **redacted**/zig-modules/src/foo/bar.zig -O Debug
我会收到一个错误:
bar.zig:1:22: error: import of file outside module path: '../shared/util.zig'
因此,我将 2 个模块添加到使用
zig init
: 生成的默认 build.zig 中
const fooModule = b.addModule("foo", .{
.root_source_file = b.path("src/foo/foo.zig"),
});
const sharedModule = b.addModule("shared", .{
.root_source_file = b.path("src/shared/shared.zig"),
});
lib.root_module.addImport("foo", fooModule);
lib.root_module.addImport("shared", sharedModule);
exe.root_module.addImport("foo", fooModule);
exe.root_module.addImport("shared", sharedModule);
lib_unit_tests.root_module.addImport("foo", fooModule);
lib_unit_tests.root_module.addImport("shared", sharedModule);
现在,当我导入
const util = @import("shared").util;
并运行测试时,我收到另一个错误:
bar.zig:1:22: error: no module named 'shared' available within module test
共享.zig:
pub const util = @import("util.zig");
我在bun、tigerbeetle和其他一些项目中搜索了解决方案,但没有成功在我的代码中采用它。有人可以提供如何烹饪 zig 0.13.0 模块的线索或项目示例吗?
Zig 有一个模块/包系统。您想要做的事情本质上可以通过
build.zig
生成的默认 zig init
来实现。如果 shared
和 foo
位于 src
目录中,则无需手动添加它们作为模块。您所需要做的就是运行zig build [step]
。例如,zig build test
运行项目中的所有测试,或 zig build run
编译并运行项目,或者仅 zig build
编译项目。