5

当我运行cabal build它时,它使用一些 Haskell 编译器在我的 .cabal 文件中构建可执行文件和/或测试套件。

我可以控制哪个编译器用于不同的目标吗?理想情况下,我希望有单独的构建目标,在同一个.cabal文件中使用 ghc 和 ghcjs。在我看来,有人可能想在同一个项目中使用 ghc 和 hugs 或两个版本的 ghc。这目前可能吗?

另外,cabal 如何决定运行时使用什么编译器cabal build?我看到我的~/.cabal/config文件中有一个编译器选项,但是将其从ghcto更改为ghcjs并取消注释它似乎并没有改变什么cabal build

4

1 回答 1

4

要使用的编译器在配置步骤期间确定(或在安装步骤的隐式配置步骤期间,该步骤不与前一个配置步骤共享配置选项)。它也由构建包的实体决定,不受编写包的人的影响。可能发生在您身上的是先前的 cabal 构建隐式调用了配置步骤并选择了编译器;未来的构建将保留先前选择的编译器,而不是卡在全局配置文件中的编译器。您可以通过简单地cabal configure再次手动运行来抵消这一点。

错误的实现可能会导致构建失败,例如

library
    if impl(ghc)
        buildable: False

将阻止 cabal 尝试使用 GHC 构建包。但是,这对于使用单独的编译器构建包的单独部分并没有真正有用,因为 cabal 将拒绝安装包,除非它可以使用单个编译器构建整个东西。

可能最好的方法是为应该由单独的编译器构建的东西制作单独的包。

于 2015-01-21T17:27:38.420 回答