如何在.cabal文件中为不同的目标使用两个不同的编译器?

时间:2015-01-21 15:35:52

标签: haskell cabal ghcjs

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

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

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

1 个答案:

答案 0 :(得分:4)

要使用的编译器在配置步骤期间(或在安装步骤的隐式配置步骤期间确定,该步骤不与先前的配置步骤共享配置选项)。它也是由构建包裹的实体决定的,并且不会受到编写包裹的人的影响。可能你发生的事情是,之前的cabal构建隐式调用了configure步骤并选择了编译器;将来的构建将保留先前选择的编译器而不是全局配置文件中的一个。您可以通过再次手动运行cabal configure来阻止它。

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

library
    if impl(ghc)
        buildable: False

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

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

相关问题