6

是否有可能以某种方式配置 cabal 项目以使用与 GHC 不同的编译器?另外是否可以通过一些标志来控制它?

我想根据一些编译标志使用 GHC 或Haste (到 JavaScript)编译我的项目。

如果我可以设置我的 cabal 配置或我的自定义脚本来执行以下操作,那将是理想的:

-- target JS
cabal configure --target=js
cabal build

-- target Native
cabal configure --target=native
cabal build
4

2 回答 2

5

要使用 GHC 或 Haste 构建 Cabal 项目,请cabal为前者使用二进制文件,haste-inst为后者使用(附带 haste)。

要在您的模块中包含条件代码,请添加{-# LANGUAGE CPP #-}和使用#ifdef __HASTE__,这将仅由 haste 定义,而不是由 GHC 定义。请注意, __GLASGOW_HASKELL__在两种情况下都定义了(这是有道理的,因为在 GHC 上构建了大部分编译的仓促)。所以你会像这样使用它

{-# LANGUAGE CPP #-}

module Module where

compiler :: String
#ifdef __HASTE__
compiler = "haste"
#else
compiler = "GHC"
#endif

从理论上讲,对于 Cabal 文件中的条件设置,这样的东西应该可以工作:

library
  exposed-modules:
        Module
  if impl(ghc)
        exposed-modules:
                Module.GHC
  if impl(haste)
        exposed-modules:
                Module.GHC
  build-depends:       base ==4.6.*

但似乎即使有haste-inst,impl(ghc)也是真的;提交错误报告

于 2013-07-12T16:44:09.143 回答
0

虽然目前无法impl(haste)在您的 cabal 文件中使用,但您现在可以检查flag(haste-inst)您的包是否正在使用haste-inst.

于 2014-02-10T19:36:57.583 回答