无法编译 ocaml .ml 文件

fail to compile ocaml .ml file

我有 4 个文件:

A.mli A.ml B.mli B.ml

使用 ocamlc -c 我编译了 A.mli 然后 A.ml 然后 B.mli 没有错误

如何在 B.ml

中使用代码格式文件 A

在文件的开头 B.ml 我有

#load "A.cmo"

并且此行无法使用 ocamlc -c

进行编译

我应该如何在我的代码中加载模块(编译代码)?

#load 命令仅适用于顶层(OCaml REPL)。

要在 B.ml 中使用来自 A.ml 的代码,您只需在 B.ml 中的代码中为名称添加前缀 A.。编译器将找到 A.mli 的编译版本,并知道要做什么。

稍后您需要 link 所有文件一起生成可执行文件。您需要按依赖顺序列出它们(一个模块出现在依赖它的其他模块之前)。

这是一个小例子:

$ head a.mli a.ml b.mli b.ml main.ml
==> a.mli <==
val f : int -> int

==> a.ml <==
let f x = x + 10

==> b.mli <==
val g : int -> int

==> b.ml <==
let g x = A.f (x * 10)

==> main.ml <==
let main () = Printf.printf "%d\n" (B.g 12)

let () = main ()
$ ocamlc -c a.mli a.ml b.mli b.ml main.ml
$ ocamlc -o main a.cmo b.cmo main.cmo
$ ./main
130

(有些工具可以自动完成大部分工作,这使得 OCaml 开发不那么乏味。但这应该展示了基本思想。)