我是Ocaml的新手,并试图编写一些小示例应用程序。我在Linux Ubuntu 10.04下使用ocamlc
版本3.11.2。我想编译两个文件:编译多个Ocaml文件
a.ml
b.ml
文件b.ml
使用的定义从a.ml
。据我所知,我只能使用ocamlc -c
来执行编译。当我将所有.cmo
文件链接到可执行文件时,我可以最后一次致电ocamlc
。另外,编译使用另一个文件定义的文件时,我必须告诉编译器在哪个文件中找到外部定义。
所以我的想法是使用:
ocamlc -i -c a.ml > a.mli
ocamlc -c a.mli b.ml
ocamlc -o b a.cmo b.cmo
的第一步作品,并产生文件a.mli
和a.cmo
,但运行第二步,当我得到
File "b.ml", line 1, characters 28-31:
Error: Unbound value foo
其中foo
是一个函数,在a.ml
中定义并在b.ml
中调用。
所以我的问题是:我如何分别编译每个源文件并指定要在命令行上导入的接口?我一直在查看文档,并且据我所知,我必须指定要包含的.mli
文件,但我不知道如何。
编辑
这里一些更多的细节。文件a.ml
包含
let foo = 5;;
文件b.ml
包含表达
print_string (string_of_int foo)^"\n";;
真正的例子是大,但这些文件我已经有我上面报告错误的定义。
EDIT 2
我已经编辑文件b.ml
与A.foo
更换foo
和这个工程(foo是可见b.ml
即使我有另一个编译错误,这并不重要,这个问题)。我想这是明确写我自己的.mli
文件,如
您是否打开A中的B ?,因为否则这没有任何意义。 –
不需要在A中定义一个模块并在B中打开它吗?目前,A中的所有定义都是全局的(我没有模块)。 – Giorgio
每个OCaml文件都有一个隐式模块。所以你的文件'a.ml'定义了一个名为'A'的模块。 –