nix-build ... --no-out-link
在Nix存储区中提供了一条路径。
是否可以在不实际构建表达式的情况下找到该路径?
是否可以在不构建表达式的情况下找到依赖关系和计划的构建操作?
我怎么能自己找到答案?
答案 0 :(得分:2)
Nix manual,“构建和测试”部分引用了nix-build
文档,在最后的“描述”段落中提到它是nix-instantiate
和nix-store -r
的组合
nix-instantiate
无法生成。它仅以推导及其结束形式计算计划:
$ nix-instantiate '<nixpkgs>' -A hello
warning: you did not specify '--add-root'; the result might be removed by the garbage collector
/nix/store/20bc2g6gfn44p9wk98s30pm346pmz0x9-hello-2.10.drv
但是,我更喜欢使用nix repl
探索Nix表达式:
$ nix repl '<nixpkgs>'
Loading '<nixpkgs>'...
Added 8623 variables.
nix-repl> hello.outPath
"/nix/store/nic2bl8ry6vfyxr9717983d5b2l4sn1c-hello-2.10"
在浏览表达式时,其制表符补全非常有用。
答案 1 :(得分:0)
man nix-store
有答案,尤其是--query
部分。
要了解输出路径:
nix-store -q --outputs $(nix-instanciate default.nix)
要了解构建时依赖性:
nix-store -qR --include-outputs $(nix-instanciate default.nix)
关于构建计划,我越接近使用--tree
标志。
请注意,nix-shell
也公开了一个$out
变量,因此第一个要点的另一种可能的解决方案是:
nix-shell --pure --run 'echo $out' some-file.nix