














ZigBrains 是 JetBrains IDE 上的 Zig 语言支持插件,集成了 ZLS,基本上可以开箱即用。但将它配置成一个接近高效的代码开发环境却费了我不少功夫。
zig build --watch/ 目录跟 HOME 目录不在同一个 btrfs 子卷下,导致 watch 命令报错:CrossDevice。
EXDEV The filesystem object indicated by path resides within a filesystem subvolume (e.g., btrfs(5)) which uses a different fsid than its root superblock.https://www.man7.org/linux/man-pages/man2/fanotify_mark.2.html
最简单是解决方案是用 anyzig 将 zig 库安装到 HOME 目录下。如果你的项目还依赖了 /usr/include 下的库,则还需要修改 zig 源码: https://github.com/ziglang/zig/issues/20670#issue-2415216229 幸运的是不用重新编译 Zig 本体
--- a/lib/std/Build/Watch.zig
+++ b/lib/std/Build/Watch.zig
@@ -175,7 +175,7 @@ const Os = switch (builtin.os.tag) {
.ADD = true,
.ONLYDIR = true,
}, fan_mask, path.root_dir.handle.fd, path.subPathOrDot()) catch |err| {
- fatal("unable to watch {}: {s}", .{ path, @errorName(err) });
+ std.log.warn("unable to watch {}: {s}", .{ path, @errorName(err) });
};
}
break :rs dh_gop.value_ptr;~/.config/JetBrains/CLion20xx.x/options/editor.xmlLSPInlayHintsProvider 设置为 trueZLS 默认只提供语法分析功能,但是 Zig 的 comptime 特性使得部分错误只会在编译期才能暴露出来,比如基于 comptime 实现的多态。所以 ZLS 还提供了一个 Build On Save 功能,可以将编译错误也加入到 LSP 的错误提示中。
首先要在 build.zig 添加一个 check 目标
接着修改 ZigBrains 中的选项:
check -fincremental
因为 ZLS 会使用 --watch 参数执行 check ,所以请确保 zig build check --watch 能正常运行。
根据这里的说明,需要为所有的 C 文件添加编译 flag -fPIE,https://github.com/floooh/dcimgui/issues/10#issuecomment-4023330366
或者你也可以选择先不用 -fincremental 选项,等 Zig 修复这个问题再说。
如果你遇到了这个问题,大概率你用的是 Arch Linux,并且没有在用 Arch 打包的 Zig。根据这个问题讨论区的描述,彻底解决需要等到 Zig 0.17.0 发布,目前的临时方案有3个:
addExecutable(.{.use_llvm = true, .use_lld = true}),不过这样会显著降低编译速度我这边遇到这个问题主要发生在 zig build test -fincremental --watch ,尝试了很久也没能解决这个问题,只好先放弃增量编译选项,不启用 LLVM 的话,其实编译速度还是很快的。
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。