buildEnv内置函数是如何工作的?

14

在 nixpkgs 手册的第 2.7 章“声明式软件包管理”中提到了一个 buildEnv: https://nixos.org/manual/nixpkgs/stable/#sec-declarative-package-management如果不了解 buildEnv 函数及其参数,这一章节很难理解。 - Thomas Koch
1个回答

11

你是想查看实际的buildenv.nix还是buildEnv函数?

因为buildenv.nix是Nix包管理器的内部机制,对于非Nix开发人员不太感兴趣。

如果你对buildEnv函数感兴趣,它是NixPkgs软件包集合的一部分,该函数在此处实现: https://github.com/NixOS/nixpkgs/blob/master/pkgs/build-support/buildenv/default.nix

即使代码提供了一些提示,但我没有找到任何真正的文档,但您可以在手册中找到一些示例: https://nixos.org/nixpkgs/manual/#sec-building-environment

如果我理解正确,清单也是Nix的内部机制:它是一个包含给定环境对应的导出列表的Nix文件。例如,您可以在安装了Nix的机器上查看其中一个:/nix/var/nix/profiles/per-user/root/channels/manifest.nix

它不太易读,看起来像这样:

[ { meta = { }; name = "nixos-18.09pre143771.a8c71037e04"; out = { outPath = "/nix/store/yqxc408mhbcksnaqndkpdkg8ylcj2xhg-nixos-18.09pre143771.a8c71037e04"; }; outPath = "/nix/store/yqxc408mhbcksnaqndkpdkg8ylcj2xhg-nixos-18.09pre143771.a8c71037e04"; outputs = [ "out" ]; system = "x86_64-linux"; type = "derivation"; } { meta = { }; name = "nixos-1803-18.03.132768.94d80eb7247"; out = { outPath = "/nix/store/ih8bhvgmp47rs3acchkc9ch7f8760rpz-nixos-1803-18.03.132768.94d80eb7247"; }; outPath = "/nix/store/ih8bhvgmp47rs3acchkc9ch7f8760rpz-nixos-1803-18.03.132768.94d80eb7247"; outputs = [ "out" ]; system = "x86_64-linux"; type = "derivation"; } ]

这段代码是关于NixOS操作系统的派生(derivation)的元数据信息。其中包含了两个不同版本的NixOS派生的信息,分别是nixos-18.09pre143771.a8c71037e04和nixos-1803-18.03.132768.94d80eb7247。
每个派生(derivation)中的元数据信息包含了派生的名称、输出路径(outPath)、系统架构(system)、类型(type)等信息。同时,还包含了派生的输出(out)信息和输出列表(outputs)。

3
builtins.buildenvlib.buildEnv 做的事情一样吗? - srghma
2
nixpkgs的buildEnv被广泛用于组合环境。通常用于创建非常简单的代理环境,以某种配置方式包装现有软件包。例如,通过向现有软件包的二进制文件添加选项或标志。 - CMCDragonkai
2
“buildEnv” 应该被记录在 Nixpkgs 手册的 第 7 章. 函数参考 下,不是吗?似乎那里的大多数部分都描述了 nixpkgs/pkgs/build-support/ 中的软件包(其中也包括 buildEnv)。 - toraritte

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接