无法编译ocaml .ml文件

时间:2015-12-30 22:07:16

标签: ocaml

我有4个文件:

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

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

如何在A

中使用代码表单B.ml

在文件B.ml的开头,我有

#load "A.cmo"

并且此行无法使用ocamlc -c

进行编译

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

1 个答案:

答案 0 :(得分:2)

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

要使用A.mlB.ml的代码,您只需在A.的代码中使用B.ml作为前缀。编译器将找到A.mli的编译版本,并将知道该怎么做。

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

这是一个小例子:

$ 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开发变得不那么繁琐。但这应该显示出基本的想法。)