问题描述
我正在用沙丘开发一个大图书馆。让我们将此库称为L
。
为避免造成大麻烦,沙丘项目有许多较小的库:A
,B
,C
,...
这些库相互依赖。
我希望用户能够opam install L
,然后以L.A
,L.B
, etc 的身份访问其他较小的库。
执行此操作的正确方法是什么?
按照@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
的显式主模块,则必须手动添加也会自动生成的模块别名。