OCaml: использование Oasis с многоуровневыми папками src
Я пытаюсь использовать oasis
чтобы скомпилировать мой проект, и мой проект организован следующим образом:
_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 ответ
Я думаю, что структура вашего проекта немного странная. У вас есть подкаталог для плагинов, но вы должны заметить, что нет пространства имен или иерархии пакетов, так что на практике это не очень полезно.
Что касается того, возможно ли это, ответ кажется смешанным:
Невозможно сделать это только с помощью oasis, потому что он не позволяет указать несколько значений для
Path
вариант.Это легко сделать с помощью ocamlbuild, пометив все, что вам нужно,
include
(но я не рекомендую это).
По мере роста вашего проекта oasis вы должны изучить определение разделов библиотеки в oasis и использовать их для организации межпроектных зависимостей. Например, в этом случае вы можете создать библиотеку "плагинов", в которую вы добавите plugin_a и plugin_b. Но без некоторого планирования здесь вы быстро столкнетесь с круговыми зависимостями.