如何管理单个Haskell程序的多个配置?

时间:2009-04-14 12:25:04

标签: configuration haskell build-automation conditional-compilation

Haskell世界中什么是autotools的替代品?我希望能够在相同源代码的不同配置之间进行选择。

例如,Haskell中至少有两种MD5实现:Data.Digest.OpenSSL.MD5Data.Digest.Pure.MD5。我想以这样的方式编写代码,它可以找出已经安装了哪个库,并且不需要安装另一个库。

在C中我可以使用Autotools / Scons / CMake + cpp。在Python中,我可以捕获ImportError。我应该在Haskell中使用哪些工具?

2 个答案:

答案 0 :(得分:14)

在Haskell中,您使用Cabal配置。在项目顶级目录中,放置一个扩展名为.cabal的文件,例如<yourprojectname>.cabal。内容大致如下:

Name:                myfancypackage
Version:             0.0
Description:         myfancypackage
License:             BSD3
License-file:        LICENSE
Author:              John Doe
Maintainer:          john@example.com
Build-Type:          Simple
Cabal-Version:       >=1.4

Flag pure-haskell-md5
  Description: Choose the purely Haskell MD5 implementation
  Default: False

Executable haq
  Main-is:           Haq.hs
  Build-Depends:     base-4.*
  if flag(pure-haskell-md5)
    Build-Depends:   pureMD5-0.2.*
  else
    Build-Depends:   hopenssl-1.1.*

Cabal documentation有更多详细信息,尤其是Configurations上的部分。

答案 1 :(得分:2)

正如nominolo所说,Cabal是使用的工具。特别是'配置'语法。