2011-05-11 60 views
7

我最近构建了一个小型的单一文件Haskell实用程序,将其包含在我纯粹的PHP(提出的眉毛,我知道)项目的“工具”部分中。小型Haskell项目的跨平台makefile?

最初,我检查了.hs源文件以及在我的Linux开发机器上生成的二进制文件到我们使用的版本控制系统(Git)中。但是现在随着我对它的更多思考,我想创建跨平台的makefile以配合它,以便其他开发人员可以在他们的系统上轻松编译它。

是否有一些最佳实践/指导原则,甚至更好,我可以下载的Makefile模板?没有什么奇特的东西,只是让开发人员指定一些关于GHC设置的细节并运行一个简单的脚本来开始。

回答

11

分发您的Haskell项目的推荐方式是使用Cabal。 Cabal既是Haskell代码的构建系统和包管理器,也可以轻松在不同平台上构建Haskell代码,同时为您处理依赖关系。

下面是一个例子阴谋文件:

Name:   MyPackage 
Version:  0.0 
Cabal-Version: >= 1.2 
License:  BSD3 
Author:   Angela Author 
Synopsis:  Small package an utility program 
Build-Type:  Simple 

Executable myutility 
    Build-Depends: base 
    Main-Is:  Main.hs 
    Hs-Source-Dirs: src 

您可以通过运行交互生成一个小集团文件

$ cabal init 

那么惊天动地会问你一些简单的问题,并生成一个阴谋集团的文件,根据答案。然后,您可以调整此文件以适应您的特定需求。


要安装包只是在包目录

$ cabal install 

您也可以上传你的包Hackage,标准哈斯克尔包程序存储库运行此。通过这种方式,人们可以用命令在单个步骤下载和安装软件包(和任何依赖关系)

$ cabal install mypackage 

还存在着工具转换惊天动地包到其它的包管理器,如果你不希望要求您的用户安装了Cabal(尽管Cabal包含在Haskell Platform中)。

它也可以很好地与Haddock为您的软件包生成参考文档。查看Hackage上的一些软件包以获取结果示例。

目前还有一些工作正在改进对Cabal测试套件的支持。总之,这些原因以及更多使得使用Cabal来组织,构建和分发Haskell项目是一个很大的好处。

+0

谢谢! Cabal是完美的解决方案,并且在Linux和Windows上开箱即用。你提供的cabal模板有很多帮助,我只需要将HUnit改为基础。 – 2011-05-11 17:57:17

+1

请注意,您也可以使用'cabal init'来创建一个空项目。最后,'cabal'是[Haskell平台](http://hackage.haskell.org/platform)的一部分,所以如果你使用核心发行版,它将在你的所有机器上。 – 2011-05-11 18:25:58

2

如果您可以负担其他依赖项,请尝试cabal。这是一个专门为Haskell设计的构建系统。