OCaml プロジェクトの構築にDuneを使用していますが、他のプロジェクトで再利用するためのスタンドアロン ライブラリを構築したいと考えています。
ライブラリのルート フォルダは で、ライブラリは(after )mylib
で初期化されました。dune init lib mylib src
cd 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
コンテキストを示し、このおもちゃの例の各ファイルの内容を示した後、質問は次のようになります。
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))
- ライブラリを正常にビルドして別のプロジェクトにリンクした後、一部のモジュールを非表示または非表示にするにはどうすればよいですか? たとえば、以前のおもちゃのライブラリが与えられた場合
mylib
、モジュールを公開せずにアクセスできないようにしたいと思いますPriv
( Java/C#の保護/内部クラスのように、のPriv
モジュール内でのみ使用できるようになります)。mylib
</p>
Real World OCaml、Cornell CS3110 テキストブック、Dune documentation、OCaml Learnで検索してみましたが、深くネストされていない限り、何も見つかりませんでした。
ご協力ありがとうございます。何かを明確に説明していない場合は、お問い合わせください。より適切に説明できるように努めます。