我在 ocaml 方面没有经验,我的情况是我正在编写我的 ocaml 代码,我尝试访问在其他 .ml 文件中定义的类型,这些文件位于我的项目根目录之外。我尝试设置 _oasis,但是当我指定库字段时,路径值无效,因为我尝试使用"../../dir"。有谁知道我怎样才能实现这个目标?我不想将它们复制到我的项目根目录中,因为我正在查看这些教程,还没有找到解决方案,谢谢!
问问题
331 次
1 回答
1
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
using 中PKG <findlib-name-of-the-dep>
,例如PKG core_kernel
. 当然,您应该在 _oasis 文件中将外部依赖项添加到您的库和应用程序中,方法是使用BuildDepends
子句,例如BuildDepends: core_kernel
.
于 2018-10-05T16:02:25.607 回答