6

私は自分のプロジェクトを自己完結型に保とうとしています。主要なサードパーティ ライブラリの依存関係はすべて、プロジェクト リポジトリ内で構築および参照されています。私のプロジェクトの主な ocaml 部分は ocamlbuild に依存しています。

しかし、含まれるバッテリーのような複雑なパッケージの場合、ocamlfind を介してプロジェクトにリンクされることが強く期待されているようです。ocamlfind は、パッケージがグローバルにインストールされることを想定しているようです。(環境変数とそのconfが別の場所を指すことを許可していることは認識していますが、基本的には、パッケージがグローバルに構成されているという前提に基づいて構築されているようです-パッケージの検索パスを動的に拡張するための同等-Iまたはフラグはありません。-Lたとえば、環境変数を設定して ocamlfind 構成を動的にオーバーライドし、プロジェクト ローカル ツリーを検索することは可能かもしれませんが、これは単なる引数よりもはるかに厄介であり、同時に削除せずにそうするのも難しいようです。プライマリ でのメイン システム パッケージの検出site-lib可能性。これも必要になる場合があります。)

ocamlbuild を使用するプロジェクトのプロジェクト ローカル ツリー内で自明でないサードパーティ パッケージをビルドおよびビルドするための適切な戦略は何ですか?

4

1 に答える 1

3

環境変数 (または個別の findlib.conf) を使用するのが (そして簡単な) 方法です。また、グローバル パッケージの検出可能性を削除する必要はpathありません。リファレンス マニュアルを参照しdestdirfindlib.confください。OCAMLPATHOCAMLFIND_DESTDIR

基本的destdirに、プロジェクト ローカル パッケージをインストールするときにローカル パスを設定し、それらを使用するときに先頭に追加します (作成するpathことを忘れないでください(バイトコード バイナリをビルドしている場合は追加します))。stublibsdestdirld.confstdlib

PSこれはocsigen-bundlerで使用されているアプローチだと思います。

問題が発生したかどうか教えてください (私もこの同じアプローチを使用することに興味があるため)。

于 2011-09-02T07:33:06.420 に答える