gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 08:50:11 25 4
gpt4 key购买 nike

我正在编写一个大型 OCaml 项目。我写了一个文件foo.ml,效果很好。在 foo.ml 目录的子目录中,有一个文件 bar.ml

bar.ml 引用 foo.ml 中的代码,所以它的开头行是:

open Foo

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

Unbound module Foo.

在不更改 foo.ml 的位置的情况下,我可以做些什么来解决这个问题?

最佳答案

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

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

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

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

在这一切之后,您会发现在链接阶段,所有目标文件(即 .cmo 或 .cmx)都需要按照与您项目的依赖图兼容的拓扑顺序列出。

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

关于ocaml - 加载不在当前目录中的 OCaml 模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44528425/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com