2016-09-27 31 views
0

我试图用oasis编译我的项目,我的项目是这样安排:OCaml的:使用绿洲多层次的src文件夹

_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 

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

回答

1

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

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

  • 它不可能只是绿洲这样做,因为它不会让你的Path选项指定多个值。

  • 它应该很容易与ocamlbuild完成,但通过用include(但我不建议这么做)标记需要的所有内容。

随着您的oasis项目的发展,您应该考虑定义绿洲中的库部分并使用它们来组织项目之间的依赖关系。例如,在这种情况下,您可以创建一个包含plugin_a和plugin_b的“插件”库。但是如果没有在这里进行一些规划,您将很快陷入循环依赖。