2017-06-13 7 views
1

大規模なOCamlプロジェクトを作成しています。私は完全に動作するファイルfoo.mlを書きました。 foo.mlのディレクトリのサブディレクトリには、ファイルbar.mlがあります。 foo.ml現在のディレクトリにないOCamlモジュールのロード

bar.ml参照コードは、そのオープニングラインがあるので:私は場所を変更することなく、これを解決するために何ができるか

Unbound module Foo. 

open Foo 

これは私のコンパイル時にエラーが発生しますfoo.ml

+1

'bar.ml'ファイルをどのようにコンパイル/ロードしますか? – Bergi

+0

https://caml.inria.fr/pub/docs/manual-ocaml/comp.html#sec269 – Bergi

答えて

6

簡単な方法は、ocamlbuildやoasisのようなOCamlビルドシステムを使用することです。もう1つのオプションはjbuilderですが、jbuilderはファイル編成についてかなりの意見があり、あなたが求めているような種類のサブディレクトリ構造は許されません。

より明示的なパスには警告が付いています。OCamlのビルドプロセスは、扱いにくい多くの可動部品が複雑なため複雑です。

この慣習的な警告の後、モジュールを探すとき、OCamlコンパイラはまず現在のコンパイル環境でモジュールを探し、コンパイルされたインタフェース ".cmi"ファイルを "-I"オプションフラグで指定されたディレクトリ現在のディレクトリと標準ライブラリディレクトリ)。

bar.mlファイルをコンパイルするには、付属ディレクトリのリストに親ディレクトリを-I ..オプションで追加する必要があります。

結局のところ、リンクフェーズでは、すべてのオブジェクトファイル(.cmoまたは.cmx)をプロジェクトの依存関係グラフと互換性のあるトポロジカルな順序でリストする必要があることがわかります。

私はアドバイスを繰り返します:適切なビルドシステムを使用してください。

関連する問題