对于生态系统的新手来说,目前尚不清楚构建和管理构建中小型 OCaml 项目的规范首选方式是什么。我了解ocamlc
, &c 的基础知识——它们反映了传统的 UNIX C 编译器,足以看起来简单明了。但是,在单个文件的一次性编译级别之上,尚不清楚如何最好地简单而干净地管理编译。问题不在于寻找潜在的工具,而是找到一种或几种正确(足够)的方式——正如社区经验所验证的——用于构建和构建标准 OCaml 项目。
我的模型用例是一个普通但不平凡的项目,纯 OCaml 或 OCaml 加上 C 依赖项。这样的项目:
- 包含许多源文件
- 链接到许多标准库
- 一个或多个第三方库的链接
- 可选地包括一个 C 库和 OCaml 包装器作为子项目(尽管这也可以单独管理并作为第 3 方库包含,如 (3) 中所示)
几个替代工具脱颖而出:
- 自定义 Makefile 似乎是大多数开源 OCaml 包中的通用标准,但显得冗长和复杂——甚至比普通的 C/C++ 项目还要复杂。更糟糕的是,许多甚至看似简单的 OCaml 库都将 autoconf/automake 置于顶层,以实现更大的复杂性。
- ocamlbuild似乎提供了一种现代的、流线型的机制,用于以最少的配置自动构建,但对于新手来说没有很好的文档记录,也没有在 OCaml 生态系统的介绍性材料中以示例为代表,也没有被任何已发布的 OCaml 项目明显使用我已经浏览了灵感。
- OASIS似乎是其他构建系统之上的一层约定和库代码,以支持构建包管理器和库,例如 Cabal。
(我还看到OMake,它似乎是一个自封的“ make++
”,其中还包括一套通用语言的标准规则,包括 OCaml 和ocaml-make née OCamlMakefile,为 GNU 提供标准规则模板make
。)
这些是否是管理 OCaml 构建的首选现代方式?
项目文件的结构如何最好?
如何包含和管理 3rd 方库依赖项?是首选在系统级别安装它们,还是有一种标准且直接的方式将它们本地管理到项目中?我更喜欢项目尽可能独立的模型。