【问题标题】:How to refresh a nix derivation (nix pill's 7.5) in nix-repl?如何在 nix-repl 中刷新 nix 派生(nix pill 的 7.5)?
【发布时间】:2017-09-29 13:51:06
【问题描述】:

查看the 7th nix pill 中给出的示例,键入:b simple 构建了一个简短的c 程序的派生。在nix-repl

simple = derivation { name = "simple"; builder = "${bash}/bin/bash"; args = [ ./simple_builder.sh ]; gcc = gcc; coreutils = coreutils; src = ./simple.c; system = builtins.currentSystem; }
:b simple

编译源代码并生成包含simple-executable 的输出目录。

如果 c 源代码发生了一些变化,例如,我们想要输出“Simple?”,那么具有相同参数的相同推导似乎不起作用。

这是为什么,这是否意味着,即使 c 文件中的微小更改也必须为推导提供一个新名称 (?) -argument?

如果是这样,如何摆脱在 nix-repl 中使用 :b adrvn 进行的旧派生?

【问题讨论】:

  • “似乎不起作用”到底是什么意思?您是否尝试过重新运行定义simple 的长行代码?
  • 是的,重新运行并没有改变工作(似乎需要重新启动 nix-repl)。在尝试不同的东西来学习 nix-lang 时,我对此感到不确定。 Emmanuel Rosa 在下面给出了答案。

标签: nix


【解决方案1】:

问题在于simple 是一个值/常量而不是一个函数。鉴于 Nix 是纯函数式的,无论您评估多少次 simple 都将始终产生相同的输出(在 nix-repl 的同一实例中)。另一方面,使用外部文件(例如 simple.nix)并使用 nix-build 将获取派生输入的更改,包括 simple.c

至于清理派生,可以使用nix-collect-garbage

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-11-17
    • 2020-08-27
    • 1970-01-01
    • 1970-01-01
    • 2017-11-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多