6

如果我在它下面构建我的 Haskell 项目,nix-shell则会给出有关 missing 的错误zlib

如果我使用 nix-shell 构建项目,nix-shell -p zlib则项目可以zlib成功查看并构建。

如何将zlib包添加到shell.nix文件以便-p zlib不再需要传递?

注意:构建是使用完成的cabal v2-build

对于使用堆栈构建,我必须执行以下操作

这是 myshell.nix当前定义的方式:

{ nixpkgs ? import <nixpkgs> {}, compiler ? "default", doBenchmark ? false }:

let

  inherit (nixpkgs) pkgs;

  f = { mkDerivation, base, directory, stdenv, text, turtle, zlib }:
      mkDerivation {
        pname = "haskell-editor-setup";
        version = "0.1.0.0";
        src = ./.;
        isLibrary = false;
        isExecutable = true;
        executableHaskellDepends = [ base directory text turtle zlib ];
        description = "Terminal program that will set up Haskell environment with a target selected editor or IDE";
        license = stdenv.lib.licenses.gpl3;
      };

  haskellPackages = if compiler == "default"
                       then pkgs.haskellPackages
                       else pkgs.haskell.packages.${compiler};

  variant = if doBenchmark then pkgs.haskell.lib.doBenchmark else pkgs.lib.id;

  drv = variant (haskellPackages.callPackage f {});

in

  if pkgs.lib.inNixShell then drv.env else drv
4

2 回答 2

4

我通过使用haskell+nix 教程创建 GHC 环境来使其工作。下面是我的release.nixdefault.nix是通过生成cabal2nix . > default.nix的:(注意zlib作为要包含在ghcWithPackages调用中的 haskell 包的一部分)

let
  config = 
  {
    packageOverrides = pkgs: 
    {
      haskellPackages = pkgs.haskellPackages.override 
      {
        overrides = new: old:
        {
          interview = new.callPackage ./default.nix;
        };
      };
    };
  };

  pkgs = import <nixpkgs> { inherit config; };

  ghc = pkgs.haskellPackages.ghcWithPackages (hpkgs: with hpkgs;
    [ cabal-install
      interview
      zlib
    ]
  );
in

with pkgs;

mkShell 
{ buildInputs = [ ghc ];
}

于 2019-10-17T17:12:19.190 回答
3

您想创建一个派生,它具有那些作为依赖项。有一个简单的构建器叫做runCommand它运行你给它的脚本。对于 shell.nix 构建器实际上不会被使用,它只是用于提供一个 shell,所以你可以给它一个空脚本:

with import <nixpkgs> { };

runCommand "my-shell" {
  buildInputs = [ zlib ];
} ""
于 2020-05-30T23:52:21.870 回答