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



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

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

在某种程度上,我希望在运行nix build时传递一个命令行参数,在这种情况下,行应该是:

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

如何引用命令行参数?

您可以使用--arg name expr命令行选项来传递布尔或其他表达式。

所以你会有

{ 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字符串文字。

最新更新