如何在ocaml文件中打开在项目根目录外定义的模块?
我对ocaml没有经验,我的情况是,我正在编写我的ocaml代码,我尝试访问其他.ml文件中定义的类型,这些文件位于我的项目根目录之外。 我试图设置_oasis,但是当我指定库字段时,路径值无效,因为我试图使用。/../dir“。如何在ocaml文件中打开在项目根目录外定义的模块?,ocaml,oasis,Ocaml,Oasis,我对ocaml没有经验,我的情况是,我正在编写我的ocaml代码,我尝试访问其他.ml文件中定义的类型,这些文件位于我的项目根目录之外。 我试图设置_oasis,但是当我指定库字段时,路径值无效,因为我试图使用。/../dir“。 有人知道我如何实现这个目标吗?我不想将它们复制到我的项目根目录中,因为我正在浏览这些教程,还没有找到解决方案,谢谢 oasis的概念是在项目的根目录中有一个\u oasis文件,该文件定义了整个项目。因此,所有路径都是相对于根文件夹(包含\u oasis的路径)指定的
有人知道我如何实现这个目标吗?我不想将它们复制到我的项目根目录中,因为我正在浏览这些教程,还没有找到解决方案,谢谢 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现在是一个事实上的工具,你也应该考虑教他你的项目结构,通过将
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
路径,因此,您甚至可以避开项目边界并引用其他库/项目