构造和构建OCaml项目的首选方法是什么?

问题描述 投票:57回答:5

对于生态系统的新手尚不清楚,在构造和管理中小型OCaml项目的构建和管理方面,经典的首选方法是什么。我了解ocamlc和[c]的基础知识,它们足以仿效常规UNIX C编译器,看起来似乎很简单。但是,在单个文件的一次性编译级别之上,尚不清楚如何最好地简单,干净地管理编译。问题不是在寻找潜在的工具,而是看到一种或几种正确(足够)的方式(已得到社区的经验验证)来构造和构建标准OCaml项目。

我的模型用例是一个普通但非平凡的项目,纯OCaml或OCaml加上C依赖项。这样的项目:

  1. 包含许多源文件
  2. 链接到许多标准库
  3. 链接到一个或多个第三方库
  4. 可选地包括一个C库​​和OCaml包装器作为子项目(尽管也可以单独管理并作为第三方库包含,如(3)所示]

几个替代工具脱颖而出:

  • 自定义Makefile似乎是大多数开源OCaml软件包中的通用标准,但令人沮丧的冗长和复杂-甚至比普通的C / C ++项目更是如此。更糟糕的是,许多看似简单的OCaml库将autoconf / automake置于最顶层,从而带来更大的复杂性。
  • ocamlbuild似乎提供了一种现代的,精简的机制,以最小的配置来自动化构建,但是对于新手来说,它没有得到充分的证明,也没有在OCaml生态系统的介绍材料中以实例表示,也没有明显地被各种应用所使用。发布了我浏览过的OCaml项目以获取灵感。
  • OASIS似乎是其他构建系统之上的惯例和库代码层,以支持构建包管理器和库,例如Cabal。

(我还看到了OMake,它似乎是一个自定义样式的[make++],其中还包括一套针对通用语言(包括OCaml和ocaml-makenéeOCamlMakefile的标准规则),提供了GNU make的标准规则。)

其中有没有一种首选的,现代的OCaml版本管理方法?

如何最好地构造项目文件?

如何包含和管理第三方库依赖关系?是将它们安装在系统级别还是首选的,或者是否有一种标准且直接的方式将它们本地管理到项目中?我更喜欢这样一种模型,在该模型中,项目应保持尽可能独立。

对于生态系统的新手尚不清楚,在构造和管理中小型OCaml项目的构建和管理方面,经典的首选方法是什么。我了解ocamlc的基础,&c .--...

build makefile ocaml ocamlbuild
5个回答
22
投票

您已经详细列出了可用的选项,但是此问题没有明确的答案。我个人的建议是也使用ocamlbuild。提供的myocamlbuild.ml文件here是一个好的开始。它使您可以轻松地编译依赖于各种库的项目。我认为它不处理绑定到C库的情况,但是wiki上还有其他示例可能会有所帮助。


15
投票

我个人为ocamlbuild会给+1。它的默认规则足以用一个命令来编译中小型项目,而没有一个就可以进行非常小的配置。它还强制执行一些非常合理的约定(不要将源代码与构建结果混合在一起)。对于大型项目,可以使用额外的规则和插件对其进行自定义。在我工作的公司中,我们将其用于large project(Ocaml +一些C +一些预处理+ ...),它的工作原理很吸引人(比Makefiles麻烦得多)。


10
投票

+ 1为OMake。


3
投票

好问题。我倾向于说:


0
投票

当前建议使用Dune

© www.soinside.com 2019 - 2024. All rights reserved.