nix 是否提供包选项/参数?我如何列出它们?

Eri*_*rik 3 nix

例如,我可以查询 llvm 的可用软件包版本:

$ nix-env -qa llvm
...
llvm-4.0.1
llvm-5.0.2
llvm-6.0.1
Run Code Online (Sandbox Code Playgroud)

使用自制软件,我可以在安装 llvm 之类的软件包时提供一个选项,在这种情况下,该--shared选项为:

$ brew install llvm --shared
Run Code Online (Sandbox Code Playgroud)

nix 是否支持提供这样的包特定选项?有没有办法列出包的可用选项?

rob*_*obx 7

是的,nix 派生可以带有可选参数。例如,LLVM 6 nixpkgs/development/compilers/llvm/6/llvm.nix 的推导是这样开始的:

{ stdenv
, fetch
...
, zlib
, debugVersion ? false
, enableManpages ? false
, enableSharedLibraries ? true
, enableWasm ? true
, darwin
}:
Run Code Online (Sandbox Code Playgroud)

您可以nix-env使用选项在命令行上为这些参数提供值,--arg或者--argstr比较手册页。例如,

nix-env -iA nixpkgs.llvm --arg enableSharedLibraries false
Run Code Online (Sandbox Code Playgroud)

不幸的是,我不知道有比阅读 nixpkgs 源代码更容易找到这些选项的方法。

  • 有人知道在“buildInputs”中使用 pkg 时如何传递 arg 吗? (3认同)
  • `--arg` 和 `--argstr` 之间的区别在于,`--arg` 的第二个参数实际上被解析为 nix 值,而 `--argstr` 的第二个参数会自动转换为字符串。要将字符串传递给`--arg`需要为其添加引号,例如`--arg参数\"value\"` (2认同)