私はOcamlを初めて使用し、小さなサンプルアプリケーションを作成しようとしています。ocamlc
LinuxUbuntu10.04でバージョン3.11.2を使用しています。2つのファイルをコンパイルしたい:
a.ml
b.ml
ファイルb.ml
はからの定義を使用しますa.ml
。私が理解している限り、私はocamlc -c
コンパイルのみを実行するために使用できます。すべてのファイルが実行可能ファイルにリンクされocamlc
たら、最後にもう一度呼び出すことができます。.cmo
また、別のファイルの定義を使用するファイルをコンパイルする場合.cmi
、外部定義を見つけるファイルをコンパイラーに指示する必要があります。
だから私の考えは使用することでした:
ocamlc -i -c a.ml > a.mli
ocamlc -c a.mli b.ml
ocamlc -o b a.cmo b.cmo
最初のステップは機能し、ファイルa.mli
とを生成しますa.cmo
が、2番目のステップを実行すると
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";;
実際の例はもっと大きいですが、これらのファイルでは、上記で報告したエラーがすでに発生しています。
編集2
私はファイルを編集b.ml
して置き換えましfoo
たが、これは機能します(この質問にとって重要ではない別のコンパイルエラーがある場合でも、A.foo
fooが表示されます)。によって提案されている b.ml
ように、自分のファイルを明示的に書き込む方がクリーンだと思います.mli