使用Oasis构建OCaml项目时未定义的模块

时间:2016-09-27 17:35:10

标签: ocaml ocamlbuild oasis

这是我,再次..我正在开发OCaml项目,我想使用Oasis来构建整个代码库。以下是我的代码库的组织方式。

src/
    core/
      init.ml
      type.ml
      utils.ml
    plugin/
      main.ml

我首先只使用以下_oasis文件构建库:

Library "engine"                                                       
Path: src/core                                                         
Modules:                                                               
  Init,                                                                
  Type,                                                                
  Utils                                                            
BuildDepends:   deriving, deriving.syntax, core, batteries             
XMETADescription: core engine

它工作正常。没有错误,我可以在engine.a文件夹中找到库_build/src/core

但是,当我尝试使用以下方式将库包含在main.ml中时:

Module T = Engine.Type
...

使用以下_oasis文件进行编译:

Library "engine"                                                       
Path: src/core                                                         
Modules:                                                               
  Init,                                                                
  Type,                                                                
  Utils                                                            
BuildDepends:   deriving, deriving.syntax, core, batteries             
XMETADescription: core engine


Executable "main"                                                      
  Path:           src/plugin                                         
  MainIs:         main.ml                                              
  CompiledObject: best                                                   
  Install:        false                                                  
  BuildDepends:   core, batteries, engine

我收到了一个错误:

Unbound module Engine

我在这里做错了吗?谁能给我一些帮助?谢谢!

1 个答案:

答案 0 :(得分:1)

您的_oasis模块定义了一个名为engine的库,但未定义Engine模块。因此,您的InitTypeUtils模块已公开,无需任何前缀即可直接访问。

如果您想将这些模块打包成父母,您可以:

  • 手动将每个模块打包成一个大的engine.ml文件
  • Pack: true文件的Library部分中使用_oasis,该文件会将包含的模块打包到名为Engine
  • 的模块中
  • 使用模块别名(请参阅the OCaml manual for more information