Как я могу открыть модули, определенные вне корневого каталога моего проекта в моем файле ocaml? - PullRequest
0 голосов
/ 04 октября 2018

У меня нет опыта работы с ocaml, моя ситуация здесь в том, что я пишу свой код ocaml, я пытаюсь получить доступ к типам, определенным в других файлах .ml, которые находятся за пределами корневого каталога моего проекта.Я попытался настроить _oasis, однако, когда я указываю поле library , значение Path недопустимо, так как я пытаюсь использовать "../../ реж" .Кто-нибудь знает, как мне достичь этой цели?Я не хочу копировать их в корневой каталог своего проекта, так как я просматривал эти учебники, пока не нашел решения, спасибо!

1 Ответ

0 голосов
/ 05 октября 2018

Идея 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.

...