2016-09-27 10 views
0

Я пытаюсь использовать oasis скомпилировать мой проект, и мой проект организован таким образом:OCaml: с помощью Oasis с папками Src Многоуровневого

_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

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

Что касается ли это возможно, ответ, кажется, смешано:

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

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

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