2017-09-29 40 views
0

查看the 7th nix pill中给出的示例,键入:b simple构建短c程序的派生。在nix-repl如何在nix-repl中更新nix派生(nix pill's 7.5)?

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文件进行细微更改,也必须给出一个新的名称(?) - 参数用于推导?

如果是这样,如何摆脱nix-repl与:b adrvn内做出的旧派生?

+1

你是什么意思的“似乎没有工作”?您是否尝试重新运行定义“简单”的长代码行? –

+0

是的,重新运行并没有改变工作(它似乎需要重新启动nix-repl)。在尝试不同的事情来学习nix-lang时,我很不确定。 Emmanuel Rosa在下面给出了答案。 – Gspia

回答

1

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

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