0

OCaml プロジェクトの構築にDuneを使用していますが、他のプロジェクトで再利用するためのスタンドアロン ライブラリを構築したいと考えています。

ライブラリのルート フォルダは で、ライブラリは(after )mylibで初期化されました。dune init lib mylib srccd mylib

mylibプロジェクトのルートであるのディレクトリ ツリーは次のとおりです。

mylib
+---dune-project
│
+---src
        dune
        priv.ml
        mymodule.ml
        mymodule.mli

ファイルの内容は次のとおりです。

mylib/砂丘プロジェクト:

(lang dune 2.7)

mylib/src/砂丘:

(library
 (name mylib))

mylib/src/priv.ml :

let rec loop a accu i =
  let n = Array.length a in
  if i = n then
    accu
  else
    loop a (accu + Array.unsafe_get a i) (succ i)

mylib/src/mymodule.mli :

val sum : int array -> int

mylib/src/mymodule.ml :

let sum a =
  Priv.loop a 0 0

コンテキストを示し、このおもちゃの例の各ファイルの内容を示した後、質問は次のようになります。

  1. mylibライブラリをビルドして別の別のプロジェクトで使用するにはどうすればよいですか?

(たとえば、別のプロジェクトでは、次のようにライブラリを使用します。

Open Mylib
let () =
  print_int (Mymodule.sum [1;2;3])

また

let () =
  print_int (Mylib.Mymodule.sum [1;2;3])

)

Dune では、実行可能ファイルが与えられた場合、ライブラリがOpamで公開されている場合、ライブラリを使用するmainために次のduneファイルを記述します。mylib

砂丘:

(executable
 (name main)
 (libraries mylib))
  1. ライブラリを正常にビルドして別のプロジェクトにリンクした後、一部のモジュールを非表示または非表示にするにはどうすればよいですか? たとえば、以前のおもちゃのライブラリが与えられた場合mylib、モジュールを公開せずにアクセスできないようにしたいと思いますPriv( Java/C#の保護/内部クラスのように、のPrivモジュール内でのみ使用できるようになります)。mylib

</p>

Real World OCamlCornell CS3110 テキストブックDune documentationOCaml Learnで検索してみましたが、深くネストされていない限り、何も見つかりませんでした。

ご協力ありがとうございます。何かを明確に説明していない場合は、お問い合わせください。より適切に説明できるように努めます。

4

1 に答える 1

0
  1. ルート ディレクトリでは、これらはこのmylib.opamような内容で呼び出されるファイルである必要があります。次に、s-expression を mylib/src/dune に追加する必要があります。最後に、プロジェクトのルートにあることを確認して、ライブラリを でビルドおよびインストールする必要があります。 実際に別のプロジェクトでライブラリを使用するには、別の砂丘ワークスペースであっても、ライブラリを使用するプロジェクトの砂丘ファイルに追加するだけです。(public_name mylib)librarydune buildopam install .
    (libraries mylib)
  2. mylib /src/dune(private_modules priv)s-expression を追加する必要があります。次に、次の内容で を作成する必要があります: : これにより、 のみが package の下で公開されるようになります。librarymylib.mlmodule Mymodule = MymoduleMymoduleMylib
于 2021-03-07T16:19:11.603 に答える