OCaml:将 Oasis 与多级 src 文件夹一起使用

OCaml: using Oasis with multiple-level src folders

我正在尝试使用oasis编译我的项目,我的项目是这样组织的:

_oasis
src/
    main.ml
    core_a.ml
    core_b.ml
    type.ml
    plugins/
        plugin_a.ml
        plugin_b.ml 

请注意,在plugin_a.ml中,它指的是模块type.ml(即open Type)。

我用oasis编译工程时,报:

Unbound module Type

这是我的 _oasis 文件的简化版本:

....
BuildTools:   ocamlbuild
BuildDepends: deriving, deriving.syntax, core, batteries

Executable "main"
  Path:           src
  MainIs:         main.ml
  CompiledObject: best
  Install:        false
  BuildDepends:   deriving, deriving.syntax, core, batteries

我是不是做错了什么?或者我正在做的不是组织这样一个项目的最佳实践?

我觉得你的项目结构有点奇怪。你有一个插件的子目录,但你应该注意没有命名空间或包层次结构,所以这在实践中并不是很有用。

至于这是否可能,答案似乎是混合的:

  • 仅使用 oasis 是不可能的,因为它不允许您为 Path 选项指定多个值。

  • 使用 ocamlbuild 应该很容易完成,但是通过使用 include 标记您需要的所有内容(但我不推荐这样做)。

随着您的 oasis 项目的增长,您应该考虑在 oasis 中定义库部分并使用它们来组织项目间的依赖关系。例如,在这种情况下,您可以创建一个 "plugins" 库,其中包含 plugin_a 和 plugin_b。但是如果不提前计划,您将很快 运行 陷入循环依赖。