如何使用堆栈使用不同的ghc构建?

Rom*_*aka 7 haskell ghc haskell-stack

我想拥有相同版本的GHC的不同的,非ABI兼容的版本,并在不同的项目中使用它们.

(在我的例子中,构建之间的差异是整数 - 简单与gmp.)

本期中的评论显示了如何添加ghc的自定义风格stack-setup-2.yaml.但是,如何指定在每个特定情况或项目中使用哪个ghc构建?

即我正在寻找一个(更好的,两个):

  1. 能够指定stack.yaml是使用整数简单还是gmp构建.
  2. 能够及时指定stack build要生成的构建.

sja*_*obi 7

您可以使用ghc-variant选项--ghc-variant标志.

如果您使用的是Windows并使用默认的stack-setup-2.yaml,则构建--ghc-variant integersimple时应使用与使用时不同的GHC --ghc-variant standard.


nh2*_*nh2 5

其他答案很好,但这是一个完整的示例,因此您不必从提供的链接中将其拼凑在一起。

把它放在你的stack.yaml文件中:

resolver: lts-12.20

setup-info:
  ghc:
    linux64-custom-dwarf:
      8.4.4:
        url: "https://downloads.haskell.org/~ghc/8.4.4/ghc-8.4.4-x86_64-deb9-linux-dwarf.tar.xz"
        sha256: f9cac6e402c71d7251f2e22f412fb4abd72c64f34481a1e548cd7f6ff2352a07

ghc-variant: dwarf
Run Code Online (Sandbox Code Playgroud)

在这setup-info部分中,我提供了 bindist 的路径、校验和(可选但推荐用于可重复性),然后说我想使用这个自定义 ghc with ghc-variant: dwarf(它似乎通过将单词附加dwarflinux64-custom-dwarf来将in 变成linux64-custom-)。

如果要跨项目共享该自定义 ghc 的定义,也可以将该setup-info部分放入$HOME/.stack/config.yaml.


GHC 黑客注意:如果你想破解 ghc 本身并使用经常更新的 GHC 快速迭代你的包,那么这种你只覆盖 GHC 二进制文件而不是声明一个完全构建的绑定器的方法更好(因为你没有每次重新编译时都构建一个绑定器)。