Неопределенный модуль при использовании 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
И это прекрасно работает. Там нет ошибки, и я могу найти библиотеку 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 ответ
Ваш _oasis
модуль определяет библиотеку с именем engine
но это не определяет Engine
модуль. Так что ваши Init
, Type
а также Utils
модули открыты и должны быть доступны напрямую без префиксов.
Если вы хотите упаковать эти модули в родительский, вы можете:
- Вручную упакуйте каждый модуль в один большой
engine.ml
файл - использование
Pack: true
вLibrary
раздел вашего_oasis
файл, который упаковывает включенные модули в модуль под названиемEngine
- Используйте псевдонимы модулей (см. Руководство OCaml для получения дополнительной информации)