如何使用 nix build 引用命令行参数?

How can I reference command line arguments with nix build?

在我的 nix 表达式中,我有一行:

myHaskellPackages.callCabal2nix "HaskellNixCabalStarter" (./.) {} 

我想以某种方式在 运行 nix build 时传递命令行参数,在这种情况下,该行应该是:

(myHaskellPackages.callCabal2nixWithOptions "HaskellNixCabalStarter" (./.) "--enable-profiling" {})

如何引用命令行参数?

您可以使用 --arg name expr command line option 来传递 bool 或其他表达式。

所以你会有

{ profiling ? false }:

# let myHaskellPackages = ... etc etc, whatever you already have
let profilingArg = if profiling then "--enable-profiling" else "";

in myHaskellPackages.callCabal2nixWithOptions "HaskellNixCabalStarter" (./.) profilingArg {}

然后

$ nix-build --arg profiling true

或者,您可以公开整个 cabal 选项字符串,例如 --argstr cabalOptions '--enable-profiling -O2'。请注意 argstr,这样您就不必将字符串转义为 Nix 字符串文字。