使用 Nix 构建 Haskell 依赖项时,如何避免构建可执行文件?

Art*_*yom 6 haskell nix

在我的.nix文件中,我有包foobarbar取决于foo

let
  haskellPackages = reflex-platform.ghcjs.override {
    overrides = self: super: {
      foo =
        pkgs.haskell.lib.dontCheck
          (pkgs.haskell.lib.dontHaddock
             (self.callCabal2nix "foo" ./foo { }));
      bar = self.callCabal2nix "bar" ./bar { };
    };
  };

in
  haskellPackages.bar
Run Code Online (Sandbox Code Playgroud)

如何禁用构建中包含的可执行文件foo?我只想建立图书馆。

我试过overrideCabal,但没有运气。这仍然构建foo可执行文件:

let
  haskellPackages = reflex-platform.ghcjs.override {
    overrides = self: super: {
      foo =
        pkgs.haskell.lib.overrideCabal
          (pkgs.haskell.lib.dontCheck
             (pkgs.haskell.lib.dontHaddock
                (self.callCabal2nix "foo" ./foo { })));
          (drv: { isExecutable = false; });
      bar = self.callCabal2nix "bar" ./bar { };
    };
  };

in
  haskellPackages.bar
Run Code Online (Sandbox Code Playgroud)

我可以用 GHC 而不是 GHCJS 重现同样的问题。

Joh*_*rer 1

在您的示例中,您可以使用:

foo = pkgs.haskell.lib.compose.setBuildTarget "lib:foo" (...)
Run Code Online (Sandbox Code Playgroud)

有一些类似的功能可用:

pkgs.haskell.lib.compose.setBuildTargets
pkgs.haskell.lib.compose.setBuildTarget
pkgs.haskell.lib.setBuildTargets
pkgs.haskell.lib.setBuildTarget
Run Code Online (Sandbox Code Playgroud)