首页 > 解决方案 > OCaml 和 dune :将小型库集成到更大的库中

问题描述

我正在开发一个带有沙丘的大型图书馆。让我们称这个库L

为避免造成大混乱,dune 项目有许多较小的库:、、、A...B这些C库相互依赖。

我希望用户能够opam install L,然后访问不同的小型库,如L.AL.B

这样做的正确方法是什么?

按照@glennsl 的评论进行编辑

这是文件系统树:

l/
l/dune-project
l/a            <- This directory contains library A
l/a/dune
l/b            <- This directory contains library B
l/b/dune

l/a/dune

(library
 (name a)
 (public_name l.a))

l/b/dune

(library
 (name b)
 (public_name l.b)
 (libraries a)) 

l/a/dune-project

(name l)

我找不到如何公开AB作为L.

标签: ocamlocaml-dune

解决方案


除非有一些配置设置干扰,否则这应该只是将其他库的模块导出为模块别名的问题:

(* L.ml (and L.mli) *)

module A = A
module B = B
module C = C

(* ... *)

这实际上是dune对命名空间库模块自动执行的操作。如果您还没有明确的主模块L,则必须手动添加也会自动生成的模块别名。


推荐阅读