SurrealDB 如何用 Nix 配置 C/C++ 依赖搭建开发环境并运行 cargo 构建
2026/9/10 21:49:43 网站建设 项目流程

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,用direnvnix develop自动配置项目依赖,然后在项目根目录运行cargo build --release --locked完成构建。前提限制:虽然 Nix 本身是跨平台的,但目前仅支持在 Linux 上构建 Linux 二进制。

准备条件

  1. 一台 Linux 主机(构建 Linux 二进制必须在 Linux 上进行,见 Nix 文档 的说明)。
  2. 已安装 Nix,按 Nix 官方安装步骤完成安装。
  3. 已启用 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 中devShellsdefault项(按当前构建平台选取,找不到时回退到x86_64-unknown-linux-gnu)。该 shell 除 C/C++ 构建依赖外,还通过 Nix 提供 Rust 工具链以及 flake.nix 中列出的开发工具:nixfmtcargo-watchwasm-packpre-commitcargo-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),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询