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

Я делаю что-то не так здесь? Или то, что я делаю, не является лучшей практикой для организации такого проекта?


person lllllllllllll    schedule 27.09.2016    source источник


Ответы (1)


Я думаю, что структура вашего проекта немного странная. У вас есть подкаталог для плагинов, но вы должны отметить, что в нем нет пространства имен или иерархии пакетов, поэтому на практике это не очень полезно.

Что касается того, возможно ли это, ответ кажется неоднозначным:

  • Это невозможно сделать только с оазисом, потому что он не позволяет указать несколько значений для параметра Path.

  • Однако это легко сделать с помощью ocamlbuild, пометив все, что вам нужно, с помощью include (но я не рекомендую этого делать).

По мере роста вашего проекта oasis вам следует изучить определение разделов библиотеки в oasis и использовать их для организации взаимозависимостей между проектами. Например, в этом случае вы можете создать библиотеку «плагинов», в которую вы включите plugin_a и plugin_b. Но без предварительного планирования здесь вы быстро столкнетесь с циклическими зависимостями.

person rgrinberg    schedule 07.10.2016