在使用 Nix 包管理器时,经常会涉及到需要在项目中选择特定版本的 GCC 的情况,这时可以使用 Flake.nix 来解决这个问题。本文将为您介绍如何在 Flake.nix 中选择特定版本的 GCC。

首先,我们需要在项目的 Flake 文件中定义一个包含 `gcc` 的依赖。我们可以通过下面的代码来实现:

“`nix

{

description = “Some project”;

license = “MIT”;

inputs = {

nixpkgs.url = “github:NixOS/nixpkgs/nixpkgs-21.05pre269417.e147574b3e5”;

};

outputs = { self, nixpkgs }: {

packages.${nixpkgs.system}.myProject =

(nixpkgs.legacyPackages.${nixpkgs.system}.callPackage ./myProject.nix {});

};

}

“`

在以上代码中,我们使用了 Nixpkgs 作为输入,并定义了一个名为 `myProject` 的输出,其中 `./myProject.nix` 为我们项目的 Nix 文件。

接下来,我们需要更新我们的 Flake.nix 文件,告诉 Nix 我们打算使用特定版本的 GCC。我们可以在 `output` 字段下添加一个 `nixosModules` 字段,并通过 `environment.systemPackages` 来指定我们要使用的 GCC 版本,如下所示:

“`nix

{

description = “Some project”;

license = “MIT”;

inputs = {

nixpkgs.url = “github:NixOS/nixpkgs/nixpkgs-21.05pre269417.e147574b3e5”;

};

outputs = { self, nixpkgs }: {

nixosModules = [

{

imports = [

(nixpkgs.legacyPackages.${nixpkgs.system}.pkgs.path +

“/lib/modules/nixos”)

];

options = {

environment.systemPackages = [

(nixpkgs.legacyPackages.${nixpkgs.system}.gcc9_3)

];

};

}

];

packages.${nixpkgs.system}.myProject =

(nixpkgs.legacyPackages.${nixpkgs.system}.callPackage ./myProject.nix {});

};

}

“`

在以上代码中,我们使用了 GCC 9.3 版本。您可以更改版本,只需将 `gcc9_3` 替换为您打算使用的版本即可。

最后,在 Flake 文件所在目录下,运行 `nix build .#myProject` 命令以构建项目。Nix 将会使用指定的 GCC 版本进行构建。

有了 Flake.nix,我们可以轻松地在项目中选择特定版本的 GCC,使项目构建更加稳定。

详情参考

了解更多有趣的事情:https://blog.ds3783.com/