問題タブ [ocamlbuild]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
ocaml - ocamlbuild でライブラリをビルドし、ocamlfind でインストールする - ベスト プラクティスは何ですか?
ライブラリを構成するモジュールをリストocamlbuild
するファイルを介してOCamlライブラリをコンパイルするために使用しています。mylib.mllib
その後、を使用してライブラリファイルをインストールしたいと思いますocamlfind
。でビルドされたバイナリ ファイルとは異なりocamlbuild
、すべてのライブラリ ファイルは_build
ディレクトリにあります。次のようなものを使用してそれらをインストールする正しい方法です
または、との間により良い統合がocamlbuild
ありocamlfind
ますか?特に、-install-lib-dir
フラグに気付きましたocamlbuild
が、その目的に関するドキュメントが見つかりません。
私は認識してoasis
いますが、今は Makefile とinstall
ターゲット内の問題を解決したいと考えています。これはすべて、ライブラリ マネージャーを使用するコンテキストにありますがopam
、議論には関係ありません。
interface - ライブラリに署名 (.mli) ファイルを含める
共通のデータ型が署名のみのモジュールで定義されているライブラリがあります(機能が含まれていないため、その署名を実装にコピーしても意味がありません)。
上記のセットアップでは、ocamlbuild はかなり驚くべきエラーでライブラリの作成に失敗します:
mllib ファイル内で B を指定せずにビルドできますが、タイプ バーが抽象化されます (これは意図したものではありません)。ocamlbuild を使用して署名を含める方法はありますか?
ocaml - ocamlbuild/ocamlfind によるライブラリのリンク
ojasmine というローカルに固定された OPAM プロジェクトがあり、これをライブラリとしてコンパイルして、test_tournabox という別のプロジェクト (最終的には JavaScript にコンパイル) で使用します。ただし、test_tournabox のコンパイルはリンク エラーで失敗しています。
ターゲット ojasmine.cma を指定して、次のように ojasmine をコンパイルします。
次に、次のようにインストールします。
ojasmine.cma が私のプロジェクト ディレクトリではなく、_build ディレクトリにあるのは奇妙に感じました。
出力は次のとおりです。
次に、cd
自分の tournabox プロジェクトに移動して、テスト スイートをビルドしてみます。
これはエラーで失敗します:
ojasmine.cma が実行可能ファイル test_tournabox.byte にリンクされていないようです。しかし、私はこれを手配するために ocamlfind への -linkpkg 引数を期待しています。私は何が欠けていますか?
編集: META ファイルは次のとおりです。
ocamlobjinfo は次のとおりです。
ocamlfind はそれを見ます:
ここにあります:
ここに ojasmine.ml があります:
そして ojasmine.mli:
ocaml - サブディレクトリを使用した Oasis ビルド構成
私は oasis を使用して ocaml プロジェクトをビルドしています。ソース コードは src というディレクトリにあります。オアシス ビルド ファイルは次のようになります。
次に、ファイルをサブフォルダーに整理し、a.mli と a.ml を src/util に配置します。これを行った後、モジュールは ocamlbuild/ocamlc から見えなくなり、'unbound module A' エラーが発生します。手動で ocamlc を呼び出す場合は、-I src/util フラグを追加して、a.mli を再び表示できるようにします。
ファイルを完全なライブラリにせずに、追加のパスを oasis 構成に追加するにはどうすればよいですか?
compiler-construction - OCaml コンパイラで型付き抽象構文木をトラバースする方法
OCaml プロジェクトのすべての識別子の型情報をダンプしようとしています。基本的には、型付き抽象構文ツリー ( https://github.com/ocaml/ocaml/blob/trunk/typing/typedtree.mli )をトラバースするのと同じです。 . 私は OCaml コンパイラのコードベースに慣れていないので、コンパイラが API を提供しているので、プラグインを簡単に記述してジョブを実行できるのか、それともコンパイラ コードをハックする必要があるのかわかりません。また、これは OCamlbuild とどのように相互作用しますか? ヒントやアドバイスをありがとう。
ocaml - OCaml が 'Profile' フラグを設定するように _oasis を設定する方法
OCaml に既存のプロジェクトと 1 つの_oasis
ファイルがあります。のプロファイリング フラグを有効にする場所がわかりませんocamlbuild
。
Oasis のマニュアルとコードを調べたところprofile
、setup.data に使用可能な変数があることがわかりました。これは、Oasis が自動生成したものだと思います。
trueに設定するには、_oasis のどこに何を含める必要がありprofile
ますか?
ocaml - OCaml で他のファイルの関数を呼び出す
長さ関数を持つ hello.ml があります。
関数を使用する call.ml:
インタープリターモード(ocaml)ではocaml call.ml
結果を取得するために使用できますが、ocamlcまたはocamlbuildでコンパイルしようとすると、コンパイルエラーが発生しました。
次に、呼び出し元、呼び出し先、およびビルド コマンドを変更して、コードを実行可能ファイルにコンパイルする方法を教えてください。