是否可以将cmake用于Haskell项目?

时间:2011-05-11 19:34:42

标签: haskell build-process cmake cabal

我正在计划用Haskell编写的项目,也许C中也有一些部分。对于构建系统,我决定反对Haskell程序cabal的常见选择,主要是因为我想学习如何在其他语言中构建程序。

我听说过CMake,我认为这是一款非常酷的产品。虽然我不知道如何使用它,但我想将CMake用于该项目,只是为了了解它是如何工作的。谷歌没有透露任何关于如何将cmake与haskell一起使用的事实,我读过的所有教程都相当混乱。有可能,如果是的话,怎么可能用Hake编译用Haskell编写的项目?

4 个答案:

答案 0 :(得分:17)

您当然可以使用CMake构建Haskell应用程序和库。要做到这一点,你需要复制Cabal所做的大部分工作,这将是有益的,但也很耗时。

我建议使用cabal build -v查看Cabal发出的命令,然后将它们转录为CMake格式。

或者,使用CMake在Haskell代码上调用cabal - 这可能不那么烦人。

答案 1 :(得分:7)

我为cabal包编写了简单的cmake包装器,并把它放在这里:

http://bitbucket.org/arrowd/cmake-findcabal(使用“获取源”按钮下载)。

目前它在Windows和FreeBSD上为我工作,但我仍然打算稍后改进它。我已经在这里回答这个问题,所以人们可以在谷歌找到它,就像我一样。

答案 2 :(得分:5)

虽然您当然可以 直接使用通用构建工具构建Haskell代码,但结果更难以维护,更难以与社区共享并且难以构建在而不是你建立在Cabal之上。

  

对于构建系统,我决定反对Haskell程序cabal的常见选择,主要是因为我想学习如何在其他语言中构建程序。

我理解这句话背后的意图是你想看到构建过程的所有单独步骤,但是通过另一种方式,通过避免cabal,你没有看到Haskell中的程序是如何构建的,你看到了重建社区提供的工具是多么痛苦。

我建议做Don提出的建议。查看cabal -v的输出,以便在您的特定编译器(可能是ghc)下构建并在CMake中复制这些步骤。

然而,一旦你理解了这些步骤,我就会认真考虑把这些知识带回到Cabal。如果只是为了让它处理支持多个编译器,平台,包管理等问题。从而减少构建系统的脆弱性,并使包装和共享工作变得更容易。

也就是说,我不能想到除了ghc本身以外的社区主动使用的单个非Cabal构建的包或二进制文件。

但是,我希望你在进入构建过程的过程中获得好运!

答案 3 :(得分:0)

我已经重写了@ arrowdodger的初步工作,在此过程中修复了一些存在的错误:

  • 由于硬编码路径,无法从项目内cmake/目录中使用
  • 发生了一些Fortran / CXX变量(导致错误行为)
  • 可以删除许多与Haskell无关的代码,其他代码基于CMake附带的C / CXX语言文件的较新版本添加

可以在以下位置找到存储库:

https://github.com/kvanberendonck/cmake-haskell

为我精心工作,我可以从ninja中获得的构建速度非常令人印象深刻。