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



又是我…我正在研究一个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

效果很好。没有错误,我可以在_build/src/core文件夹中找到engine.a库。

然而,当我尝试在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

我做错了什么吗?有人能帮帮我吗?谢谢你!

您的_oasis模块定义了一个名为engine的库,但它没有定义Engine模块。因此,您的Init, TypeUtils模块是公开的,应该可以直接访问,不需要任何前缀。

如果你想把这些模块打包到父模块中,你可以:

  • 手动将每个模块打包成一个大的engine.ml文件
  • _oasis文件的Library部分使用Pack: true,这将把包含的模块打包到一个名为Engine的模块中
  • 使用模块别名(更多信息参见OCaml手册)

相关内容

  • 没有找到相关文章

最新更新