0

我正在尝试使用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

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

4

1 回答 1

1

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

至于这是否可能,答案似乎喜忧参半:

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

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

随着您的 oasis 项目的增长,您应该考虑在 oasis 中定义库部分并使用这些部分来组织项目间的依赖关系。例如,在这种情况下,您可以创建一个“插件”库,其中包含 plugin_a 和 plugin_b。但是如果没有提前计划,你很快就会遇到循环依赖。

于 2016-10-07T03:16:55.710 回答