如何使用 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 字符串文字。
在我的 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 字符串文字。