要使用两种GHC或急速建立一个惊天动地的项目,使用cabal
二进制对于前者,和haste-inst
(随匆匆)为后者。
要在您的模块中添加条件代码,请添加{-# LANGUAGE CPP #-}
并使用#ifdef __HASTE__
,它只能由haste定义,而不能由GHC定义。请注意,__GLASGOW_HASKELL__
在两种情况下都被定义(这很有意义,因为大部分编译都是基于GHC构建的)。所以,你可以使用它像
{-# LANGUAGE CPP #-}
module Module where
compiler :: String
#ifdef __HASTE__
compiler = "haste"
#else
compiler = "GHC"
#endif
理论上,对于有条件的设置在惊天动地的文件这样的事情应该工作:
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)
是真实的; bug report已提交。
谢谢!我可以使用不同的'project.cabal'选项吗?在代码中,我可以使用'#ifdef',并且我想要例如JS版本不具有'graphviz'的'build-depends'? –
额外 - '{ - #LANGUAGE CPP# - }'与'ghc cpp后端'有什么关系?我想使用'LLVM'后端。 –
@ danilo2要回答第二个问题:CPP杂注不必对C++做任何事情。它允许使用[C预处理程序](http://en.wikipedia.org/wiki/C_preprocessor) - 又名“cpp”。 cpp只使用#if和#ifdef做有条件的_preprocessing_(包括或排除部分代码),但通常(在Haskell中)不会影响编译本身。 – phg