我正在计划用Haskell编写的项目,也许C中也有一些部分。对于构建系统,我决定反对Haskell程序cabal的常见选择,主要是因为我想学习如何在其他语言中构建程序。
我听说过CMake,我认为这是一款非常酷的产品。虽然我不知道如何使用它,但我想将CMake用于该项目,只是为了了解它是如何工作的。谷歌没有透露任何关于如何将cmake与haskell一起使用的事实,我读过的所有教程都相当混乱。有可能,如果是的话,怎么可能用Hake编译用Haskell编写的项目?
答案 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/
目录中使用可以在以下位置找到存储库:
https://github.com/kvanberendonck/cmake-haskell
为我精心工作,我可以从ninja
中获得的构建速度非常令人印象深刻。