又是我…我正在研究一个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
, Type
和Utils
模块是公开的,应该可以直接访问,不需要任何前缀。
如果你想把这些模块打包到父模块中,你可以:
- 手动将每个模块打包成一个大的
engine.ml
文件 - 在
_oasis
文件的Library
部分使用Pack: true
,这将把包含的模块打包到一个名为Engine
的模块中 - 使用模块别名(更多信息参见OCaml手册)