10

最近、プロジェクトディレクトリでファイルを整理することにしました。いくつかの異なるファイルタイプ用に持っていたパーサーを独自のディレクトリに移動し、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上記のリンクフェーズには含まれていないことに気付くでしょう。実際には、パーサー関連のファイルは含まれていません。

編集:以下のコメントと回答から新しい詳細を追加しました。

4

2 に答える 2

4

検索パスにパーサー ディレクトリを「含める」必要があります。あなたはでこれを行うことができます_tags:

"parser": include

次にocamlbuild、パーサー ディレクトリで興味深いファイルを検索できます。

于 2010-02-08T04:23:06.393 に答える
3

parser.mlimlpackファイルの処理における依存関係を何らかの形で妨害しているのでは ないかと思います。が処理およびコンパイルされるparser.cmiときに、パック操作から生成されます。ファイルを削除parser.mlpackしてビルドしてみてください。parser.mliそれがうまくいけば、これは本当の答えに再処理することができます。

また、ディレクトリにがあり、タグが設定されている場合は、parser/モジュールのプレフィックスとして使用する必要はありません。しかし、それはこれに違いをもたらすべきではありません。parser.mlpackparser.mlpackparserinclude

更新:これは問題を回避しましたが、根本的な原因ではありませんでした。以下のコメントによると、根本的な原因は、.mlpack再配置されたに記載されているファイルでした。

于 2010-02-08T17:20:35.233 に答える