I’m learning zig and stuck with it’s import system.
Here’s my project tree:
<code>├── build.zig
├── build.zig.zon
└── src
├── foo
│ ├── bar.zig
│ └── foo.zig
├── main.zig
├── root.zig
└── shared
├── shared.zig
└── util.zig
</code>
<code>├── build.zig
├── build.zig.zon
└── src
├── foo
│ ├── bar.zig
│ └── foo.zig
├── main.zig
├── root.zig
└── shared
├── shared.zig
└── util.zig
</code>
├── build.zig
├── build.zig.zon
└── src
├── foo
│ ├── bar.zig
│ └── foo.zig
├── main.zig
├── root.zig
└── shared
├── shared.zig
└── util.zig
Zig doesn’t (yet?) have a builtin module/package system, so if I import
<code>const util = @import("../shared/util.zig");
</code>
<code>const util = @import("../shared/util.zig");
</code>
const util = @import("../shared/util.zig");
inside bar.zig and run test:
<code>zig test **redacted**/zig-modules/src/foo/bar.zig -O Debug
</code>
<code>zig test **redacted**/zig-modules/src/foo/bar.zig -O Debug
</code>
zig test **redacted**/zig-modules/src/foo/bar.zig -O Debug
I’ll get a error:
<code>bar.zig:1:22: error: import of file outside module path: '../shared/util.zig'
</code>
<code>bar.zig:1:22: error: import of file outside module path: '../shared/util.zig'
</code>
bar.zig:1:22: error: import of file outside module path: '../shared/util.zig'
So I add 2 modules to default build.zig generated with zig init
:
<code>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);
</code>
<code>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);
</code>
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);
Now when I’m importing const util = @import("shared").util;
and running test I get another error:
<code>bar.zig:1:22: error: no module named 'shared' available within module test
</code>
<code>bar.zig:1:22: error: no module named 'shared' available within module test
</code>
bar.zig:1:22: error: no module named 'shared' available within module test
shared.zig:
<code>pub const util = @import("util.zig");
</code>
<code>pub const util = @import("util.zig");
</code>
pub const util = @import("util.zig");
I searched a solution in bun, tigerbeetle and some other projects, but haven’t succeeded to adopt it in my code. Could someone provide a clue or project example of how to cook zig 0.13.0 modules?