如何在ocaml文件中打开在项目根目录外定义的模块?

如何在ocaml文件中打开在项目根目录外定义的模块?,ocaml,oasis,Ocaml,Oasis,我对ocaml没有经验,我的情况是,我正在编写我的ocaml代码,我尝试访问其他.ml文件中定义的类型,这些文件位于我的项目根目录之外。 我试图设置_oasis,但是当我指定库字段时,路径值无效,因为我试图使用。/../dir“。 有人知道我如何实现这个目标吗?我不想将它们复制到我的项目根目录中,因为我正在浏览这些教程,还没有找到解决方案,谢谢 oasis的概念是在项目的根目录中有一个\u oasis文件,该文件定义了整个项目。因此,所有路径都是相对于根文件夹(包含\u oasis的路径)指定的

我对ocaml没有经验,我的情况是,我正在编写我的ocaml代码,我尝试访问其他.ml文件中定义的类型,这些文件位于我的项目根目录之外。 我试图设置_oasis,但是当我指定字段时,路径值无效,因为我试图使用。/../dir“
有人知道我如何实现这个目标吗?我不想将它们复制到我的项目根目录中,因为我正在浏览这些教程,还没有找到解决方案,谢谢

oasis的概念是在项目的根目录中有一个
\u oasis
文件,该文件定义了整个项目。因此,所有路径都是相对于根文件夹(包含
\u oasis
的路径)指定的

在您的情况下,项目结构可能如下所示:

my_project/
|
+- _oasis
+-lib/
| |
| +- types/
|    |
|    +- common.ml
+-src/
  |
  +- app/
     |
     +- app_main.ml
与之对应的
\u 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

最后,既然MelLin现在是一个事实上的工具,你也应该考虑教他你的项目结构,通过将 MelLI//C>文件添加到项目的根文件夹中,内容如下:

 B _build/
 B _build/lib/types
 B _build/src/app
 S lib/types
 S src/app

如果您有任何外部依赖项,可以使用
PKG
将它们添加到
.merlin
,例如
PKG-core\u-kernel
。当然,您应该使用
BuildDepends
子句将外部依赖项添加到_oasis文件中的库和应用程序中,例如,
BuildDepends:core\u kernel

非常感谢,您的答案对我来说非常清楚!如何在
.merlin
文件中设置模块
路径
?假设
common.ml
在我的项目根目录之外,即
./main/srce/
,如何在.merlin中指定
common
模块路径?只需将相应路径添加到构建(
B
)和源
S
文件夹中,该路径相对于
.merlin
路径,因此,您甚至可以避开项目边界并引用其他库/项目