我想覆盖 stdenvmkShell以使用 gcc10Stdenv。我查看了https://nixos.wiki/wiki/Using_Clang_instead_of_GCC,它提供了覆盖 stdenv 的说明,但它没有描述如何在mkShell不参考任何特定包的情况下制作外壳(仅适用于“在现有软件包上使用 Nix CLI”)。
我的问题是是否可以在没有现有包的情况下为 mkShell 覆盖 stdenv?如果是这样,怎么办?
我想覆盖 stdenvmkShell以使用 gcc10Stdenv。我查看了https://nixos.wiki/wiki/Using_Clang_instead_of_GCC,它提供了覆盖 stdenv 的说明,但它没有描述如何在mkShell不参考任何特定包的情况下制作外壳(仅适用于“在现有软件包上使用 Nix CLI”)。
我的问题是是否可以在没有现有包的情况下为 mkShell 覆盖 stdenv?如果是这样,怎么办?
尝试:
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 = ...;
}
这只是一个常规函数,所以我们用两个参数调用它。