我是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'的模塊。 –