問題タブ [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.
compiler-construction - OCamlプロジェクトをコンパイルするためのばかげて簡単な方法は何ですか?
私はOCamlをいじっています。私が最初に知りたいのは、OCamlプロジェクトをビルドすることです。今、私はただ学んでいるので、ばかげて単純なものが欲しいだけです。誰かが私にビルドシステムと、そのビルドシステムを使用するための「helloworld」タイプの例を教えてもらえますか?
ocaml - "ocamlfind" を使用して OCaml コンパイラとトップレベルの (プロジェクト固有の) ライブラリを検索する
OCaml コンパイラとトップレベルの両方でocamlfindを使用しようとしています。私が理解したことから、必要なライブラリをプロジェクトのルートにある _tags ファイルに配置する必要があります。これにより、ocamlfindツールがそれらをロードし、モジュールで次のように開くことができるようになります。
現在、_tags ファイルは次のようになっています。
プロジェクトをコンパイルしたくない場合は、ocamlc または ocamlopt 引数を指定してocamlfindコマンドを起動できるようですが、同じ方法でトップレベルを起動するオプションが表示されませんでした。これを行う方法はありますか (" ocamlfind ocaml
" のようなもの)?
また、プロジェクト固有のモジュールを _tags ファイルに配置する方法もわかりません。モジュール名がLandであると想像してください。現在、#use "land.ml"
ディレクティブを使用してファイルを開いてモジュールをロードしていますが、これは適切な方法ではないことが示唆されています。ocamlfindによって読み込まれるように指定するには、_tags でどの構文を使用する必要がありますか(land.ml が ocamlfind 検索パスにないことを考慮してください)。
ありがとう、チャーリーP。
編集: この投稿の最初の回答によると、 _tags ファイルは ocamlfind では使用されません。上記の質問はまだ残っています。リストに新しいものがあります: ocamlfindにライブラリを指定する正しい方法は何ですか?
compilation - サブフォルダー内のモジュールを適切にコンパイルする(ocamlbuild)
最近、プロジェクトディレクトリでファイルを整理することにしました。いくつかの異なるファイルタイプ用に持っていたパーサーを独自のディレクトリに移動し、ocamlbuildを使用することにしました(プロジェクトがより複雑になり、単純なシェルスクリプトではもはや十分ではなかったため)。
myocamlbuildをいくつかの基本的なルールで変更することで外部プロジェクトを正常に含めることができました(呼び出しocaml_lib
、ocamlfindを別の機会に使用します)が、フォルダーをモジュールとしてプロジェクトに適切に含める方法に固執しています。ファイルを作成し、parser.mlpack
含める適切なモジュール(たとえば、「parser / Date」など)を入力parser.mli
し、それらの実装のディレクトリのルートにを書き込み、_tags
ファイルを変更しました(以下を参照)。
コンパイル中に、パーサーディレクトリが適切にトラバースされ、parser.cmi
両方ともディレクトリparser.mli.depends
に作成されました_build
。*.cm[xio]
パーサーサブディレクトリ内のすべてのファイルと同様に。
何か冗長なことをしているように感じますが、それでも、コンパイル時にプロジェクトがパーサーモジュールを見つけることができません。
ありがとう!
_tags
コンパイルエラー
-I parser
上記のリンクフェーズには含まれていないことに気付くでしょう。実際には、パーサー関連のファイルは含まれていません。
編集:以下のコメントと回答から新しい詳細を追加しました。
build-automation - ocamlbuild; トップレベルの構築
サブディレクトリを使用してocamlbuildのプロジェクトを正常に再編成し、ocamlfindを使用したところ、トップレベルを構築するのが難しいことがわかりました。
.mltop
含まれるすべてのモジュールを含むファイルを作成し、パッケージをに追加しましたが_tags
、ビルドが機能しません。モジュールの1つでコンパイルされたC関数が見つかりません。オンに-classic-display
すると、そのファイルlibcside.a
が含まれておらず、コンパイルもされていないことがわかります。cファイルは、myocamlbuild.ml
によって依存関係として追加されます。
とで_tags
、
そして最後に、libcside.clib
で
トップレベルのビルドを設定する際に何かが足りませんが、信頼できるリソースをオンラインで見つけることができません。ありがとう。
ocaml - OCaml ライブラリを持たないコンピュータで実行できるネイティブ実行ファイルを OCamlBuild で生成できますか?
私は ocamlbuild でコンパイルしている大規模な OCaml プロジェクトを持っています。すべてが正常に動作します。必要なすべてを実行する優れた実行可能ファイルがあります。問題は、そのネイティブ実行可能ファイル「my_prog.native」を別の場所 (同じオペレーティング システムの別のマシンなど) で実行すると、新しいマシンがカモミール (バッテリーで使用される) を見つけることができないと訴えることです。私が使用しているライブラリ)。ocamlbuild から取得した実行可能ファイルはスタンドアロンであり、それを実行したマシンに OCaml や Camomile が存在する必要はないと思っていましたが、そうではないようです。
本当にスタンドアロンの実行可能ファイルを作成する方法についてのアイデアはありますか?
eclipse-plugin - OcaIDEはJoCamlツールを認識しません
OcamlbuildモードでOcaIDEを使用しているときに問題が発生しました。自分のJoCamlソースをコンパイルしようとしています。JoCamlのマニュアル(ページの下部)によると、 JoCamlでocamlbuildを使用するには、ocamlbuildに-use-jocaml
引数を追加するだけです。確かに、私が自分のプロジェクトのルートに行き、
ocamlbuild -use-jocaml foo.native
それは私の実行可能ファイルをうまく生成します。
しかし、OcaIDEでは
/bin/sh: jocamldep: command not found
OcaIDEでは、-use-jocaml
フラグは(プロジェクトのプロパティの)[その他のフラグ]ボックスに渡されます。そして、それは確かに機能しています。苦情は、jocamlのものが見つからないということです。不可解なのは、jocamlがインストールされており、任意のランダムなターミナルウィンドウからアクセスできることです。たとえば、実行中
jocamldep -modules foo.ml > foo.ml.depends
私のプロジェクトでは、目的の依存関係ファイルが生成されます。
したがって、OcaIDEを構成して、JoCaml実行可能ファイルがどこにあるかなどを伝える必要があるように思われます。これは、たとえばOCamlに対して行われます。しかし、JoCamlのためにそれを行う場所はありません。そして、jocamldep / jocamlc / etcがすべてどこからでもアクセス可能である場合、OcaIDEがそれらを選択できないのは本当に奇妙です。
何か案は?
(ocamlbuildプラグインを実行して、「myocamlbuild.ml」ファイルでフラグを渡すことができることを認識しています。ocamlbuildプラグインに慣れたら、おそらく後の段階で使用します。しかし、ここでの質問はOcaIDEに関するものです。編集:実際、ocamlbuildプラグインは解決策ではないようです。ocamlbuildには-use-jocaml
jocamlの使用を強制するオプションがありますが(正常に動作します)、プラグインシステムはそれをサポートしていません。つまり、use_jocaml(またはjocamlに関連するもの)はオプションのリストにはありません。)
build - OCaml プロジェクトを構造化してビルドするための推奨される方法は何ですか?
エコシステムの初心者には、小規模から中規模の OCaml プロジェクトを構築および管理するための標準的に推奨される方法が不明です。, &c.の基本を理解しています。これらはocamlc
、従来の UNIX C コンパイラを十分に反映しており、単純に見えます。しかし、個々のファイルの 1 回限りのコンパイルのレベルを超えて、コンパイルを単純かつクリーンに管理する最善の方法は不明です。問題は潜在的なツールを探すことではなく、標準的な OCaml プロジェクトを構造化および構築するための (コミュニティの経験によって検証された) 1 つまたはいくつかの正しい (十分な) 方法を見つけることです。
私のモデルの使用例は、純粋な OCaml または OCaml と C の依存関係の、ささやかな、しかし重要なプロジェクトです。そのようなプロジェクト:
- 多数のソースファイルが含まれています
- 多くの標準ライブラリへのリンク
- 1 つ以上のサードパーティ ライブラリへのリンク
- オプションで、サブプロジェクトとして C ライブラリと OCaml ラッパーを含めます (ただし、(3) のように、これを個別に管理してサードパーティ ライブラリとして含めることもできます)。
いくつかの代替ツールが際立っています。
- カスタム Makefile は、ほとんどのオープン ソース OCaml パッケージで共通の標準のように見えますが、イライラするほど冗長で複雑に見えます。控えめな C/C++ プロジェクトよりもさらに複雑です。さらに悪いことに、多くの一見単純な OCaml ライブラリでさえ、autoconf/automake を上に重ねてさらに複雑にしています。
- ocamlbuildは、最小限の構成でビルドを自動化するための最新の合理化されたメカニズムを提供しているように見えますが、初心者向けに十分に文書化されておらず、OCaml エコシステムの紹介資料で例として示されておらず、公開されているさまざまな OCaml プロジェクトのいずれでも目に見えて使用されていません。インスピレーションを求めて閲覧しました。
- OASISは、Cabal のようなパッケージ マネージャーとライブラリの構築をサポートするために、他のビルド システムの上にある規約とライブラリ コードのレイヤーのようです。
(私はまた、OCaml を含む一般的な言語の標準ルール一式を含む自称 " " のように見えるOMakeと、GNU の標準ルールのテンプレートを提供するocaml-make (旧称 OCamlMakefile) を見てきました。)make++
make
これらのいずれかが、OCaml ビルドを管理する好ましい最新の方法ですか?
プロジェクト ファイルはどのように構成するのが最適ですか?
サードパーティのライブラリの依存関係はどのように含まれ、管理されていますか? それらをシステム レベルでインストールすることをお勧めしますか、それともプロジェクトに対してローカルでそれらを管理する標準的で簡単な方法はありますか? 私は、プロジェクトが可能な限り自己完結型のままであるモデルを好みます。
debugging - OcamldebugをBatteriesIncludedプロジェクトでどのように使用できますか?
構文拡張機能を含む、バッテリーを使用する単純なocamlbuildプロジェクトがあります。
_tags
:
something.ml
:
これは、デバッグ用に構築されています。
print
ただし、でコマンドを使用しようとするとocamldebug
、次のエラーが発生します。
Batteries
これは、 open
edのスコープでデバッグする場合にのみ発生するようです。
このエラーの原因は何ですか?どうすれば回避できますか?
ocamlbuild - 2 つの異なるターゲットが連続してコンパイルされた場合に、ビルド済みの obj ファイルを使用して ocamlbuild を強制する方法
ネイティブ コードにコンパイルする必要がある 2 つの異なる ml-targets があります。両方のターゲットがいくつかのモジュールを共有しています。
問題は、「ocamlbuild targetA」を実行すると、モジュール C、D、および E がオブジェクト コードにコンパイルされることです。しかし、「ocamlbuild targetB」を実行すると、モジュール D と E が再度コンパイルされます。
モジュール D と E (targetA と targetB で共有されている) の再コンパイルを強制的に回避するにはどうすればよいですか?
私は ocamlbuild 3.11.2 を使用しています。
ヒントはありますか?
さようならアンドレアス
ocaml - OCamlbuild がコンパイルに失敗し、Netsys の実装が提供されていないというエラーが表示されます。
OCaml のxmlrpc-light ライブラリを使用して記述された XML-RPC サーバーを ocamlbuild でコンパイルしようとしていますが、次のようになります。
このmyocamlbuild.ml
ようなファイルと、1行を含むファイルがあることに注意してください。_tags
このプラグインは、他の場合(client.native
たとえば、同じクライアント/サーバーアプリケーションの場合)ではうまく機能しましたが、server.native
. この苦情は、ライブラリ Netsys がコンパイラで利用できないことを示唆しています。しかし、私たちは得る
netsys が にインストールされていることを意味し/usr/lib/ocaml/netsys
ます。そのディレクトリを調べると、次のことがわかります。
また、
したがって、確かに netsys というライブラリがインストールされており、すぐに使用できる cmxa ファイルがありますが、いくつかの奇妙な理由で、モジュール Netsys に実装が提供されていないという ocamlbuild の苦情があります。ocamlbuild が読み取ることができたという事実は/usr/lib/ocaml/equeue/equeue.cmxa
、ライブラリを見つけるという点で、環境 ($PATH など) に関してすべてが問題ないはずであると結論付けるのに十分なはずです。
これはすべて Debian 6.0 にあり、私の OCaml のバージョンは 3.11.2 です。
ブラウジングした後、svn commit メッセージ( repository diff ) を見つけました。これは、使用されているスレッドの数に関係している可能性があることを示唆しています。実際、コードのどこかで Mutex を使用しています (この他の質問のコードserver.ml
とコードを確認してください)。Mutex のものを削除しても、エラーは引き続き発生します。しかし、さらにファイルから を削除すると、すべてがコンパイルされます。したがって、私の結論は、スレッド ライブラリを で直接使用できないということです。これは奇妙です。client.ml
server.ml
pkg_threads
_tags
xmlrpc-light