如何针对 .cabal 文件中的不同目标使用两个不同的编译器?
How to use two different compilers for different targets in a .cabal file?
当我 运行 cabal build
它使用一些 Haskell 编译器在我的 .cabal 文件中构建可执行文件 and/or 测试套件。
我可以控制针对不同的目标使用哪个编译器吗?理想情况下,我希望在同一个 .cabal
文件中使用 ghc 和 ghcjs 的单独构建目标。在我看来,有人可能想在同一个项目中使用 ghc 和 hugs 或两个版本的 ghc。目前可以吗?
此外,cabal 如何决定在 运行ning cabal build
时使用什么编译器?我看到我的 ~/.cabal/config
文件中有一个编译器选项,但将其从 ghc
更改为 ghcjs
并取消注释,似乎并没有改变 cabal build
的作用。
要使用的编译器是在配置步骤中确定的(或在安装步骤的隐式配置步骤中,它不与前一个配置步骤共享配置选项)。它也由构建包的实体决定,不受编写包的人的影响。可能发生在你身上的是之前的 cabal 构建隐式调用了配置步骤并选择了一个编译器;未来的构建将保留以前选择的编译器,而不是卡在全局配置文件中的编译器。您可以再次手动 运行 cabal configure
取消它。
错误的实现可能会导致构建失败,例如
library
if impl(ghc)
buildable: False
将阻止 cabal 尝试使用 GHC 构建包。但是,这对于使用单独的编译器构建包的单独部分并不是很有用,因为 cabal 将拒绝安装包,除非它可以使用单个编译器构建整个包。
可能最好的方法是为应该由单独的编译器构建的东西制作单独的包。
当我 运行 cabal build
它使用一些 Haskell 编译器在我的 .cabal 文件中构建可执行文件 and/or 测试套件。
我可以控制针对不同的目标使用哪个编译器吗?理想情况下,我希望在同一个 .cabal
文件中使用 ghc 和 ghcjs 的单独构建目标。在我看来,有人可能想在同一个项目中使用 ghc 和 hugs 或两个版本的 ghc。目前可以吗?
此外,cabal 如何决定在 运行ning cabal build
时使用什么编译器?我看到我的 ~/.cabal/config
文件中有一个编译器选项,但将其从 ghc
更改为 ghcjs
并取消注释,似乎并没有改变 cabal build
的作用。
要使用的编译器是在配置步骤中确定的(或在安装步骤的隐式配置步骤中,它不与前一个配置步骤共享配置选项)。它也由构建包的实体决定,不受编写包的人的影响。可能发生在你身上的是之前的 cabal 构建隐式调用了配置步骤并选择了一个编译器;未来的构建将保留以前选择的编译器,而不是卡在全局配置文件中的编译器。您可以再次手动 运行 cabal configure
取消它。
错误的实现可能会导致构建失败,例如
library
if impl(ghc)
buildable: False
将阻止 cabal 尝试使用 GHC 构建包。但是,这对于使用单独的编译器构建包的单独部分并不是很有用,因为 cabal 将拒绝安装包,除非它可以使用单个编译器构建整个包。
可能最好的方法是为应该由单独的编译器构建的东西制作单独的包。