2

我想覆盖 stdenvmkShell以使用 gcc10Stdenv。我查看了https://nixos.wiki/wiki/Using_Clang_instead_of_GCC,它提供了覆盖 stdenv 的说明,但它没有描述如何在mkShell不参考任何特定包的情况下制作外壳(仅适用于“在现有软件包上使用 Nix CLI”)。

我的问题是是否可以在没有现有包的情况下为 mkShell 覆盖 stdenv?如果是这样,怎么办?

4

1 回答 1

4

尝试:

pkgs.mkShell.override {stdenv = pkgs.gcc10Stdenv} {
  inputsFrom = ...;
  ...
}

这是在 nixpkgs 中更改包(只是函数)的输入的标准方法。它应该在这种情况下工作。

或者,您可以按照 Chris 的建议将mkShell 实现复制并导入。./mkShell.nix

let mkShell = import ./mkShell.nix;
in mkShell {
  lib = pkgs.lib; 
  stdenv = pkgs.gcc10Stdenv;
} { 
  inputsFrom = ...;
}

这只是一个常规函数,所以我们用两个参数调用它。

于 2020-07-20T14:03:57.193 回答