OCaml 和沙丘:将小型库集成到大型库中
OCaml and dune : Integrate small libraries in a larger library
我正在用 dune 开发一个大图书馆。我们称这个库为 L
.
为避免造成大混乱,沙丘项目有许多较小的库:A
、B
、C
、...
这些库相互依赖。
我希望用户能够 opam install L
,然后访问 L.A
、L.B
、等[=49] =].
执行此操作的正确方法是什么?
根据@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)
我找不到如何将 A
和 B
公开为 L
的模块。
除非有一些配置设置干扰,这应该只是将其他库的模块导出为模块别名的问题:
(* L.ml (and L.mli) *)
module A = A
module B = B
module C = C
(* ... *)
这实际上是 dune
对命名空间库模块自动执行的操作。如果您还没有 L
的显式主模块,则必须手动添加本应自动生成的模块别名。
我正在用 dune 开发一个大图书馆。我们称这个库为 L
.
为避免造成大混乱,沙丘项目有许多较小的库:A
、B
、C
、...
这些库相互依赖。
我希望用户能够 opam install L
,然后访问 L.A
、L.B
、等[=49] =].
执行此操作的正确方法是什么?
根据@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)
我找不到如何将 A
和 B
公开为 L
的模块。
除非有一些配置设置干扰,这应该只是将其他库的模块导出为模块别名的问题:
(* L.ml (and L.mli) *)
module A = A
module B = B
module C = C
(* ... *)
这实际上是 dune
对命名空间库模块自动执行的操作。如果您还没有 L
的显式主模块,则必须手动添加本应自动生成的模块别名。