Haskell世界中什么是autotools的替代品?我希望能够在相同源代码的不同配置之间进行选择。
例如,Haskell中至少有两种MD5实现:Data.Digest.OpenSSL.MD5
和Data.Digest.Pure.MD5
。我想以这样的方式编写代码,它可以找出已经安装了哪个库,并且不需要安装另一个库。
在C中我可以使用Autotools / Scons / CMake + cpp
。在Python中,我可以捕获ImportError
。我应该在Haskell中使用哪些工具?
答案 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是使用的工具。特别是'配置'语法。