如何在 nix-repl 中刷新 nix 推导(nix pill 的 7.5)?
How to refresh a nix derivation (nix pill's 7.5) in nix-repl?
查看 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
-可执行文件。
如果 c 源代码稍作更改,比如说,我们想要输出 "Simple?",具有相同参数的简单推导似乎不起作用。
为什么会这样,这是否意味着即使对 c 文件进行微小更改,也必须为推导提供新名称 (?) 参数?
如果是这样,如何摆脱在 nix-repl 中使用 :b adrvn
进行的旧推导?
问题是 simple
是一个 value/constant 而不是函数。鉴于 Nix 是纯函数式的,无论你计算多少次 simple
它总是会产生相同的输出(在 nix-repl
的同一个实例中)。另一方面,使用外部文件(例如 simple.nix)并使用 nix-build
将获取对推导输入的更改,包括 simple.c
.
至于清理推导,可以使用nix-collect-garbage
。
查看 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
-可执行文件。
如果 c 源代码稍作更改,比如说,我们想要输出 "Simple?",具有相同参数的简单推导似乎不起作用。
为什么会这样,这是否意味着即使对 c 文件进行微小更改,也必须为推导提供新名称 (?) 参数?
如果是这样,如何摆脱在 nix-repl 中使用 :b adrvn
进行的旧推导?
问题是 simple
是一个 value/constant 而不是函数。鉴于 Nix 是纯函数式的,无论你计算多少次 simple
它总是会产生相同的输出(在 nix-repl
的同一个实例中)。另一方面,使用外部文件(例如 simple.nix)并使用 nix-build
将获取对推导输入的更改,包括 simple.c
.
至于清理推导,可以使用nix-collect-garbage
。