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

Configuration 如何管理单个Haskell程序的多个配置?,configuration,haskell,build-automation,conditional-compilation,Configuration,Haskell,Build Automation,Conditional Compilation,在Haskell world中,什么是自动工具的替代方案?我希望能够在相同源代码的不同配置之间进行选择 例如,Haskell中至少有两种MD5实现:Data.Digest.OpenSSL.MD5和Data.Digest.Pure.MD5。我希望以这样一种方式编写代码,它可以找出已经安装了哪个库,而不需要安装另一个库 在C语言中,我可以使用Autotools/Scons/CMake+cpp。在Python中,我可以捕获ImportError。在Haskell中我应该使用哪些工具?在Haskell中

在Haskell world中,什么是自动工具的替代方案?我希望能够在相同源代码的不同配置之间进行选择

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


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

在Haskell中,您使用阴谋集团配置。在项目顶层目录中,您放置了一个扩展名为
.cabal
的文件,例如
.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.*

《阴谋集团》有更多的细节,特别是关于的章节。

正如诺米诺所说,阴谋集团是使用的工具。特别是"配置",“语法。

谢谢!这正是我一直在寻找的答案。据我所知,我必须使用CC选项和cpp。对吗?对,它叫
CPP options
CC
是C编译器。你还必须使用阴谋集团来构建你的项目。查看我的一个项目中的Makefile和.cabal文件:。另外,您需要将{-#语言CPP}添加到相关文件中。谢谢,诺曼,这是更好的标题。