以下示例中未找到阴谋集团,问题是如何更正示例以便找到阴谋集团。
这个例子对the nix pill 8.1进行了非常严格的修改。在nix-repl
上,键入:l <nixpkgs>
然后"${cabal-install}"
会给出cabal-install所在商店的路径,它包含带有包含cabal可执行文件的bin的子目录。即。
> /nix/store/pathtocabal-install/bin/cabal -v
cabal-install version 2.0.0.0
compiled using version 2.0.0.2 of the Cabal library
下面你应该找到与&#34; make c&#34;相对应的文件。示例
与他们一起,
> nix-build hello.nix
不起作用。它首先告诉我们构建&#34;这些推导&#34;然后说那个
hello_builder.sh: line 2: cabal: command not found
我怀疑$ cabal-install / bin是一种错误的引用cabal的方式,但在nix-repl
找到了它的商店路径。
hello_builder.sh甚至比c-example更短。请注意,安装部件仍然缺失(首先应该建立构建器以查找cabal)。
export PATH="$coreutils/bin:$ghc/bin:$cabal-install/bin:$binutils/bin"
cabal build hello
hello.nix - 可能不需要binutils。
with (import <nixpkgs> {});
derivation {
name = "hello";
builder = "${bash}/bin/bash";
args = [ ./hello_builder.sh ];
inherit binutils coreutils ghc cabal-install;
src = ./hello.cabal;
system = builtins.currentSystem;
}
hello.cabal - 在使用cabal-install和ghc的nix-shell
中,这可行。
name: hello
version: 0.1.0.0
build-type: Simple
cabal-version: >=1.24
executable hello
main-is: hello.hs
default-language: Haskell2010
build-depends: base >=4.9 && <4.10
hello.hs
module Main where
main :: IO ()
main = putStrLn "Hello there!"
延迟补充:
通过向构建器添加echo $PATH
,我们可以看到路径不正确。它是/nix/store/...coreutils-8.28/bin:/nix/store...ghc-8.0.2/bin:-install/bin:/nix/store/...binutils-2.28.1/bin
。 $cabal
变为空字符串,而不是$cabal-install
。因此,cabal可执行文件没有正确的存储路径。
这回答了问题的部分原因以及如何纠正它仍然存在。开放的原因部分是,为什么inherit cabal-install
不能在这里使用。
答案 0 :(得分:1)
inherit cabal-install;
的问题是cabal-install
不是BASH中的有效变量名。 Nix将提供给derivation
的集合中的密钥转换为BASH中的变量。
而不是inherit cabal-install;
您可以执行cabal_install = cabal-install;
之类的操作,然后在构建器中使用cabal_install
。