正在加载不在当前目录中的OCaml模块

正在加载不在当前目录中的OCaml模块,ocaml,Ocaml,我正在写一个大型OCaml项目。我编写了一个文件foo.ml,它工作得非常好。在foo.ml目录的子目录中,有一个文件bar.ml bar.ml引用了foo.ml中的代码,因此它的开头行是: open Foo 这在编译时给了我一个错误: Unbound module Foo. 如何在不更改foo.ml位置的情况下修复此问题?简单的方法是使用OCaml构建系统,如OCAMLBILD或oasis。另一种选择是jbuilder,但jbuilder对文件组织非常有见解,不允许您要求的那种子目录结构

我正在写一个大型OCaml项目。我编写了一个文件
foo.ml
,它工作得非常好。在
foo.ml
目录的子目录中,有一个文件
bar.ml

bar.ml
引用了
foo.ml
中的代码,因此它的开头行是:

open Foo
这在编译时给了我一个错误:

Unbound module Foo.

如何在不更改
foo.ml
位置的情况下修复此问题?

简单的方法是使用OCaml构建系统,如OCAMLBILD或oasis。另一种选择是jbuilder,但jbuilder对文件组织非常有见解,不允许您要求的那种子目录结构

更明确的路径附带一个警告:OCaml构建过程非常复杂,有许多移动部件,很难处理

在此常规警告之后,当查找模块时,OCaml编译器首先在当前编译环境中查找模块,然后在“-I”选项标志指定的目录(加上当前目录和标准库目录)中查找编译接口“.cmi”文件

因此,为了编译
bar.ml
文件,您需要使用
-I..
选项在包含的目录列表中添加父目录

在所有这些之后,您将发现在链接阶段,所有对象文件(即.cmo或.cmx)都需要按照与项目的依赖关系图兼容的拓扑顺序列出


因此,让我重复我的建议:使用适当的构建系统。

如何编译/加载
bar.ml
文件?