【问题标题】:How buildEnv builtin function works?buildEnv 内置函数如何工作?
【发布时间】:2018-03-31 17:32:34
【问题描述】:

buildEnv 是如何工作的?为什么它是内置的?我该如何使用它? What does manifest argument?buildEnv 的文档在哪里?

【问题讨论】:

    标签: nix


    【解决方案1】:

    查看实际的buildenv.nixbuildEnv 函数?

    因为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"; } ]

    【讨论】:

    • builtins.buildenvlib.buildEnv 做同样的事情吗?
    • nixpkgs buildEnv 经常用于组合环境。通常用于创建非常简单的代理环境,将现有包包装在某种配置中。例如,通过向现有包的二进制文件添加选项或标志。
    • 不应该将buildEnv 记录在Chapter 7. Functions reference 下的 Nixpkgs 手册中吗?似乎那里的大多数部分都描述了 nixpkgs/pkgs/build-support/ 中的包(buildEnv 也位于其中)。
    猜你喜欢
    • 2015-08-21
    • 2023-01-19
    • 2019-02-01
    • 2015-11-25
    • 1970-01-01
    • 2019-03-19
    • 2020-11-29
    • 2020-09-01
    • 2015-09-18
    相关资源
    最近更新 更多