假设我有一组模块,每个模块都带有子模块。
M1.X M2.X M3.X
M1.Y M2.Y M3.Y
M1.Z M2.Z M3.Z
M1.W M2.W M3.W
M1.Q M2.Q M3.Q
M1.P M2.P M3.P
此外,我希望这些灌木中的每一个都位于一个主模块下。
Home.M1
Home.M2
Home.M3
现在,很容易为每个M1
、M2
和M3
使用 OasisPack:
选项构建项目目录。特别是,我喜欢并试图解决的是(a)以标准.ml
/.mli
格式布置文件的能力和(b)ocamldoc
生成正确链接的文档。
但是由于我想在一个公共模块层次结构下分发每个M1
,M2
和M3
在同一个库中,我不能使用Pack:
,而是被迫将整个该死的东西放入一个文件中,以便 (a) 不会意外破坏全局命名空间,(b) 不会意外地在整个Home.
命名空间中扩散不打算直接使用的模块,以及 (c) 不会破坏 ocamldoc 链接。
所以我的问题是,根据上述建议的目标,我如何使用 Oasis 创建具有这种形式的分层模块的包?
一些额外的限制包括:
M1.
,M2.
, 和M3.
命名空间下的模块发生冲突绝非偶然——在真实情况下也会发生这种情况!M2.
和命名空间中的模块M3.
依赖于命名空间中的模块M1.
。
我的偏好将能够得出一个解决方案,该解决方案还允许合理的文件布局,例如
src -+
+-- m1 -+
| +-- x.ml
| +-- x.mli
| +-- y.ml
| +-- y.mli
| +-- z.ml
| +-- z.mli
| |
| ...
|
|
+-- m2 -+
| +-- x.ml
| +-- x.mli
| +-- y.ml
| +-- y.mli
| +-- z.ml
| +-- z.mli
| |
| ...
|
|
+-- m3 -+
+-- x.ml
+-- x.mli
+-- y.ml
+-- y.mli
+-- z.ml
+-- z.mli
|
...
也有可能这对 Oasis 来说是不可能的。在这种情况下,关于如何使用其他构建工具的建议是可以接受和欢迎的。假设我对其他工具知之甚少……因为这可能是真的!