正在加载不在当前目录中的OCaml模块
我正在写一个大型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对文件组织非常有见解,不允许您要求的那种子目录结构
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
文件?