【问题标题】:How can I manage multiple configurations of a single Haskell program?如何管理单个 Haskell 程序的多个配置?
【发布时间】:2009-04-14 12:25:04
【问题描述】:

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

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

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

【问题讨论】:

  • 谢谢,诺曼,这是更好的标题。

标签: configuration haskell build-automation conditional-compilation


【解决方案1】:

在 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 部分。

【讨论】:

  • 谢谢!这正是我一直在寻找的答案。据我了解,我必须使用 CC-Options 和 cpp。对吗?
  • 对,它叫CPP-optionsCC是C编译器。您还必须使用 cabal 构建您的项目。查看我的一个项目中的 Makefile 和 .cabal 文件:Scion。此外,您需要将 {-# LANGUAGE CPP #-} 添加到相关文件中。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2019-11-20
    • 1970-01-01
    • 2019-06-19
    • 1970-01-01
    • 2012-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多