SurrealDB 如何用 Nix 配置 C/C++ 依赖搭建开发环境并运行 cargo 构建
【免费下载链接】surrealdbA scalable, distributed, collaborative, document-graph database, for the realtime web项目地址: https://gitcode.com/GitHub_Trending/su/surrealdb
SurrealDB 是用 Rust 编写的数据库,源码构建时依赖 cmake、protobuf 等 C/C++ 工具链。Nix 文档说明:Nix 可以为本项目配置这些 C/C++ 依赖,使 Cargo 命令直接正常工作。本文的任务路径是:在 Linux 主机上安装 Nix 并启用 Flakes,用direnv或nix develop自动配置项目依赖,然后在项目根目录运行cargo build --release --locked完成构建。前提限制:虽然 Nix 本身是跨平台的,但目前仅支持在 Linux 上构建 Linux 二进制。
准备条件
- 一台 Linux 主机(构建 Linux 二进制必须在 Linux 上进行,见 Nix 文档 的说明)。
- 已安装 Nix,按 Nix 官方安装步骤完成安装。
- 已启用 Nix Flakes(下文给出配置方法)。
启用 Nix Flakes
Flakes 在官方上仍属实验特性,默认未开启,但 SurrealDB 对两种模式都提供了支持。由于 Flakes 的使用体验更好,官方文档强烈建议启用它。
编辑~/.config/nix/nix.conf或/etc/nix/nix.conf,加入:
experimental-features = nix-command flakes如果你的 Nix 是 multi-user 模式,修改后需要重启nix-daemon;系统使用systemd时执行:
sudo systemctl restart nix-daemon可选:配置二进制缓存
从零构建 SurrealDB 及其全部依赖会比较耗时。官方提供了二进制缓存,执行下面一条命令即可配置:
nix run nixpkgs#cachix use surrealdb该命令会下载并运行 Cachix 命令,把系统配置为使用官方的 binary cache,之后构建可以直接复用缓存产物。
克隆源码
克隆 SurrealDB 仓库并进入根目录:
git clone https://gitcode.com/GitHub_Trending/su/surrealdb cd surrealdb用 Nix 配置 C/C++ 依赖
文档给出两条路径:自动配置(direnv,默认推荐)和手动进入 shell(nix develop)。两条路径完成后效果相同——项目依赖被注入环境变量,cargo命令可以正常运行。
路径 A:direnv 自动配置
每次进入项目目录时由 Nix 自动装好依赖。副作用说明:该路径会安装两个 Nix 包并修改你的~/.bashrc。
nix profile install nixpkgs#direnv nix profile install nixpkgs#nix-direnv然后把下面这行加入~/.bashrc或类似的 shell 启动文件:
eval "$(direnv hook bash)"最后在项目根目录(也就是.envrc所在目录)执行:
direnv allow本仓库根目录的 .envrc 内容只有use flake一行,即指示 direnv 使用仓库根目录的 flake.nix 来构建开发环境。执行direnv allow授权后,之后每次cd进项目,shell 会自动进入 Nix 配置好的环境。
路径 B:手动使用 nix develop
不想装direnv时,可以手动进入开发 shell:
nix develop在 shell 内直接运行cargo命令即可。进入的 shell 对应 flake.nix 中devShells的default项(按当前构建平台选取,找不到时回退到x86_64-unknown-linux-gnu)。该 shell 除 C/C++ 构建依赖外,还通过 Nix 提供 Rust 工具链以及 flake.nix 中列出的开发工具:nixfmt、cargo-watch、wasm-pack、pre-commit、cargo-make。由于 Rust 工具链也由 Nix 提供,不需要再单独rustup target add。
如果需要构建静态二进制的开发环境,flake 中定义了专门的 attr:nix develop .#static-binary,它对应x86_64-unknown-linux-musl目标。
运行 cargo 构建
依赖环境就绪后,在项目根目录执行 构建文档 给出的命令:
cargo build --release --locked --target x86_64-unknown-linux-gnu--locked会强制按Cargo.lock中的依赖版本解析;--target指定构建目标平台。构建无报错完成,即说明 Nix 环境配置成功——Nix 文档对成功的判定就是"环境配置好后,cargo命令可以正常工作"。
限制与日常维护
- 平台限制:目前 Nix 构建流程只支持在 Linux 上构建 Linux 二进制。想从其他平台构建时,文档给出的替代方案是通过 Docker 运行 Nix(
nixos/nix镜像),见 Nix 文档 的 "Running Nix from Docker" 一节。 - 磁盘占用:Nix 的工作方式会占用较多磁盘空间。官方建议用
nix-collect-garbage -d回收空间;该命令会删除 store 中无引用的旧版本路径,执行前确认不需要回退到旧版本产物。 - 非 Nix 平台(macOS、Ubuntu 原生等)的构建方式见 doc/BUILDING.md,需要手动安装 cmake、protobuf、llvm 等系统依赖,与本文的 Nix 路径互斥,二选一即可。
【免费下载链接】surrealdbA scalable, distributed, collaborative, document-graph database, for the realtime web项目地址: https://gitcode.com/GitHub_Trending/su/surrealdb
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考