Идея oasis состоит в том, что у вас есть один файл _oasis
в корневом каталоге вашего проекта, и этот файл определяет весь проект.Следовательно, все пути указаны относительно корневой папки (та, которая содержит _oasis
)
В вашем случае структура проекта может выглядеть следующим образом:
my_project/
|
+- _oasis
+-lib/
| |
| +- types/
| |
| +- common.ml
+-src/
|
+- app/
|
+- app_main.ml
ИФайл _oasis
, который ему соответствует, будет выглядеть следующим образом:
OASISFormat: 0.4
Name: myproject
Version: 0.1
Synopsis: captures the world
Authors: robots
Maintainers: humans
License: MIT
Copyrights: (C) Acme corp
Plugins: META (0.4)
BuildTools: ocamlbuild
Library "common_types"
Path: lib/types
FindlibName: acme-common-types
Modules: Common
Executable "control-people"
Path: src/app
MainIs: app_main.ml
Install: true
BuildDepends: common_types
Наконец, поскольку Merlin теперь является инструментом де-факто, вы также должны подумать о том, чтобы обучить его структуре своего проекта, добавив файл .merlin
вкорневая папка вашего проекта со следующим содержимым:
B _build/
B _build/lib/types
B _build/src/app
S lib/types
S src/app
Если у вас есть какие-либо внешние зависимости, вы можете добавить их в .merlin
, используя PKG <findlib-name-of-the-dep>
, например, PKG core_kernel
.И, конечно, вы должны добавить свои внешние зависимости к своим библиотекам и приложениям в файле _oasis, используя предложение BuildDepends
, например, BuildDepends: core_kernel
.