Nix:如何全局覆盖 stdenv.cc?

afa*_*kas 6 nixos nix nixpkgs

我想使用stdenv.cc覆盖(即不更改 nixpkgs)全局覆盖特定的 GCC 版本(不一定在 nixpkgs 中)。有没有办法做到这一点?

像这样的覆盖会导致无限递归(因为包gcc49作为stdenv输入):

self: super:
{
  stdenv = super.overrideCC super.stdenv super.gcc49;
}
Run Code Online (Sandbox Code Playgroud)

改变stdenv.cc全局的正确方法是什么?

手动设置stdenv = ...是不可行的,因为我不仅import nixpkgs想在构建/使用 nix 表达式时替换,而且还想在例如中替换。ccnix-shell -p package

有人可以帮我弄这个吗?

小智 2

(import <nixpkgs> { overlays = [(self: super: { gcc = self.gcc10; })]; }).stdenv.cc
Run Code Online (Sandbox Code Playgroud)

这将返回 gcc-10.1.0 的派生,因此它可以工作。