6

新しいプリミティブを実装するために、単一の C ファイルにも依存する OCaml バイナリmain.nativeを構築しようとしています。この C ファイルは、コンパイルしてリンクする必要があります。ファイルだけでこれを行う方法はありますか?明らかな問題は、OCamlbuild がスキャン時に依存関係を検出しないため、依存関係について明示的に通知する必要があることです。main.mlcustom.c_tagsmain.ml

ocamlbuild main.native

OCamlbuild は *.c ファイルを *.o ファイルにコンパイルするルールを知っていますが、依存関係を追加する方法がわかりません。

4

2 に答える 2

6

そこには多く リソース あります。

main.native最初に、 as にタグを付けて c-stub への依存関係を作成し、それに応じてリンクする必要があります。(ちなみに、これは c-library が と呼ばれていることを前提としていcstubますが、好きなようにすることができます)。

_tags:

<*.{byte,native}> : use_cstub
<**/*.cm{x,}a>    : use_cstub

次に、myocamlbuild.mlタグ付けされたものへの c-library の依存関係を作成します。

dep ["link";"ocaml";"use_cstub"] ["libcstub.a"]

OCamlbuild にはライブラリ ファイル(*.so および *.a) を作成するためのルールがありますが、ビルド対象のファイルのリストをファイルに追加する必要があり.clibます。

cstub.clib:

cobjfile1.o
cobjfile2.o
...

すべてのヘッダー ファイルも、メイン ディレクトリからディレクトリにコピーする必要があります_build/。これは、それらが c でのコンパイルに依存していることを指定することによって行われます ( はmyocamlbuild.mlheadersプロジェクト内のヘッダー ファイルの名前を示す文字列のリストです。

dep ["c"; "compile"] headers;

最後に、プロジェクトを c-stub ライブラリにリンクするときにフラグを追加します (これも にありますmyocamlbuild.ml)。

flag ["link";"ocaml";"use_cstub"] (S[A"-dllib";A"-lcstub";A"-cclib";A"-lcstub"]);
于 2013-10-29T15:14:48.750 に答える