2

使用するのと同じ流れで:

ocamlc -i foo.ml  

foo.mlのデフォルト署名を生成するには、コンパイル済みファイル (*.cmo) またはアーカイブ (*.cma) から署名を生成する方法はありますか?

私の使用例は、リンクしたいアーカイブabcd.cmaがあり、多数のモジュール (モジュールabc、およびdなど) が含まれており、複数の *.mli および * を気にしたくない場合です。 cmi my Makefile は、(ライブラリを使用する) ユーザー側コードをコンパイルおよびリンクするために処理する必要があります。たとえば、 abcd.cmaアーカイブにあるaモジュールのみを使用するuses_a.mlファイルがあるとします。私の理解では、abcd.cmaモジュールとリンクするには、次 の手順を実行する必要があります。

ocamlc -i a.ml > a.mli
ocamlc -c a.mli
ocamlc -c uses_a.ml  
ocamlc abcd.cma uses_a.cmo

ソースや署名にアクセスできない場合、これは複雑すぎるか不可能に思えます。最後のコマンドでアーカイブ全体をコンパイラに提供することを考えると、モジュールの特定の署名ファイルをコンパイルする (または、ソースにアクセスできる場合は生成する) という儀式を行わなければならない理由が明確ではありません。使用しています。最後のコマンドは、ツールによって、その行の後続のモジュールが使用するアーカイブに存在する任意のモジュールの「デフォルト」署名を使用するための招待として解釈される可能性があります。ところで、現時点では Makefile の自動生成ツールを使用したくありません。

4

1 に答える 1

5

a.ml と a.mli をコンパイルする必要がある場合、ライブラリを用意しても意味がありません。

ライブラリは通常、abcd.cmaファイル (またはネイティブ コードの両方) と、ライブラリからエクスポートされるモジュールの一連のインターフェイス (.cmi ファイル) でabcd.a構成されます。abcd.cmxaしたがって、通常、あなたの場合、ファイルa.cmiはライブラリと一緒に提供されるべきです。

そのような場合は、次のことを行うだけです。

 ocamlc -I path/to/directory/containing_a.cmi -c uses_a.ml
 ocamlc -o program.opt abcd.cma uses_a.cmo
于 2012-04-10T19:43:29.327 に答える