【问题标题】:OCaml and dune : Integrate small libraries in a larger libraryOCaml 和 dune :将小型库集成到更大的库中
【发布时间】:2021-01-24 07:46:24
【问题描述】:

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

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

我希望用户能够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 的模块。

【问题讨论】:

  • 只暴露来自LABC 模块是不是不行?
  • @glennsl 我的问题不准确。对不起。我对其进行了编辑以回答您的问题。

标签: ocaml ocaml-dune


【解决方案1】:

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

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

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

(* ... *)

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

【讨论】:

  • 有效!我在看这些节......没有看到这个明显的解决方案。谢谢!
  • 除非你知道dune 是这样工作的,否则它绝对不明显,不。不过,文档中有一些提示,主要是在 library 节及其 wrapped 字段的介绍性描述中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-08-09
  • 1970-01-01
  • 2011-06-04
  • 1970-01-01
  • 2014-01-27
  • 2015-10-26
  • 1970-01-01
相关资源
最近更新 更多