作者:向陽阿莫_545 | 来源:互联网 | 2023-02-01 13:00
我正在写一个大型的OCaml项目.我写了一个foo.ml
完美的文件.在目录的子目录中foo.ml
,有一个文件bar.ml
.
bar.ml
引用代码foo.ml
,所以它的开头是:
open Foo
这在编译时给了我一个错误:
Unbound module Foo.
如何在不改变位置的情况下解决这个问题foo.ml
?
1> octachron..:
简单的方法是使用OCaml构建系统之一,如ocamlbuild或oasis.另一种选择是jbuilder,但是jbuilder对文件组织非常了解,并且不允许你要求的那种子目录结构.
更明确的路径带有警告:OCaml构建过程很复杂,许多移动部件很难处理.
在这个习惯性警告之后,当查找模块时,OCaml编译器首先在当前编译环境中查找模块,然后在"-I"选项标志指定的目录中查找编译接口".cmi"文件(加上当前目录和标准库目录).
因此,为了编译您的bar.ml
文件,您需要使用该-I ..
选项在包含目录列表中添加父目录.
毕竟,您将发现在链接阶段,所有目标文件(即.cmo或.cmx)都需要以与项目的依赖关系图兼容的拓扑顺序列出.
因此,让我重复一下我的建议:使用适当的构建系统.