最近、プロジェクトディレクトリでファイルを整理することにしました。いくつかの異なるファイルタイプ用に持っていたパーサーを独自のディレクトリに移動し、ocamlbuildを使用することにしました(プロジェクトがより複雑になり、単純なシェルスクリプトではもはや十分ではなかったため)。
myocamlbuildをいくつかの基本的なルールで変更することで外部プロジェクトを正常に含めることができました(呼び出しocaml_lib
、ocamlfindを別の機会に使用します)が、フォルダーをモジュールとしてプロジェクトに適切に含める方法に固執しています。ファイルを作成し、parser.mlpack
含める適切なモジュール(たとえば、「parser / Date」など)を入力parser.mli
し、それらの実装のディレクトリのルートにを書き込み、_tags
ファイルを変更しました(以下を参照)。
コンパイル中に、パーサーディレクトリが適切にトラバースされ、parser.cmi
両方ともディレクトリparser.mli.depends
に作成されました_build
。*.cm[xio]
パーサーサブディレクトリ内のすべてのファイルと同様に。
何か冗長なことをしているように感じますが、それでも、コンパイル時にプロジェクトがパーサーモジュールを見つけることができません。
ありがとう!
_tags
debug : true
<*.ml> : annot
"parser" : include
<parser/*.cmx>: for-pack(Parser)
<curlIO.*> : use_curl
<mySQL.*> : use_mysql
<**/*.native> or <**/*.byte> : use_str,use_unix,use_curl,use_mysql
コンパイルエラー
/usr/local/bin/ocamlopt.opt unix.cmxa str.cmxa -g -I /usr/local/lib/ocaml/site-lib/mysql mysql.cmxa -I /usr/local/lib/ocaml/curl curl.cmxa curlIO.cmx utilities.cmx date.cmx fraction.cmx logger.cmx mySQL.cmx data.cmx project.cmx -o project.native
File "\_none\_", line 1, characters 0-1:
Error: **No implementations provided for the following modules:**
Parser referenced from project.cmx
Command exited with code 2.
-I parser
上記のリンクフェーズには含まれていないことに気付くでしょう。実際には、パーサー関連のファイルは含まれていません。
編集:以下のコメントと回答から新しい詳細を追加しました。