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. Но без некоторого планирования здесь вы быстро столкнетесь с круговыми зависимостями.

Другие вопросы по тегам