問題タブ [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 - パッケージのプロジェクトローカルコピーで ocamlfind/ocamlbuild ツールチェーンを使用するにはどうすればよいですか?
私は自分のプロジェクトを自己完結型に保とうとしています。主要なサードパーティ ライブラリの依存関係はすべて、プロジェクト リポジトリ内で構築および参照されています。私のプロジェクトの主な ocaml 部分は ocamlbuild に依存しています。
しかし、含まれるバッテリーのような複雑なパッケージの場合、ocamlfind を介してプロジェクトにリンクされることが強く期待されているようです。ocamlfind は、パッケージがグローバルにインストールされることを想定しているようです。(環境変数とそのconfが別の場所を指すことを許可していることは認識していますが、基本的には、パッケージがグローバルに構成されているという前提に基づいて構築されているようです-パッケージの検索パスを動的に拡張するための同等-I
またはフラグはありません。-L
たとえば、環境変数を設定して ocamlfind 構成を動的にオーバーライドし、プロジェクト ローカル ツリーを検索することは可能かもしれませんが、これは単なる引数よりもはるかに厄介であり、同時に削除せずにそうするのも難しいようです。プライマリ でのメイン システム パッケージの検出site-lib
可能性。これも必要になる場合があります。)
ocamlbuild を使用するプロジェクトのプロジェクト ローカル ツリー内で自明でないサードパーティ パッケージをビルドおよびビルドするための適切な戦略は何ですか?
linker - ocamlbuild内のリンクされたライブラリの順序
ライブラリがリンカーに追加される順序に問題があります。ocamlbuildによって以前に構築されたライブラリは、flag
ルールに含めたライブラリのリストの後にリンクされています。そして、私はどちらにもこのタイプの依存関係を定義する方法を見ていませんmyocamlbuild.ml
。
具体的には、問題はgzcaml
、ライブラリ自体()を必要とする以前に構築されたライブラリ()とのリンクにありz
ます。gccの新しいバージョンでは厳密性が追加されているため、引数は。の-lz
後に表示する必要がありますlibgzcaml.a
。
私はこれらすべてのライブラリをに含めています、
ここでprocess
、ライブラリとを交互にリストを作成しA"-cclib"
ます。
また、追加のライブラリが(詳細出力から-lm
)追加されますが-ldl
、これらを変更/追加する方法がわかりませんか?(これは私の問題を即座に解決します)。
私myocamlbuild.ml
はかなり長いです、そうでなければ私はそれをここに含めたでしょう。上記のコードをの下部、上部に移動してみましたAfter_rules
。また、順序は変更されますが、ocamlbuildが以前に作成したビルド済みライブラリ(cなど)の後には変更されません。
編集 以下は、上記の問題を解決するためにconfigureスクリプトとocamlbuildで使用したコードスニペットです。乾杯!
のconfigure.ac
のmyocamlbuild.ml.in
ocaml - OCamlbuild とネイティブ ダイナミック リンク ライブラリのビルド
私は ocaml listserv に質問を投稿しましたが、誰も応答しませんでした。ここの誰かが私を馬鹿だと呼ぶか、状況を確認するか、創造的な解決策を提供してくれることを願っています。
動的ライブラリをビルドするときocamlbuild
に、最終的なリンク行で行き詰まり、
これにより、hereのようなエラーが発生します。-cc
このエラーは、オプションを削除して-shared
フラグが に渡されると修正されgcc
ます。
OCamlbuild は-cc
オプションをすべてに渡すので、それを削除することはできません。ocamlopt のバグのようです。誰かが同様の状況を経験しましたか?コンパイルで何かまたはオプションが不足していますか?
ありがとう。
編集
私の解決策は、myocamlbuild.ml のフラグを介してオプションを渡すことです。
makefile - Makefileにハードコードされたパスがあります-それらを排除するためにocamlfindを使用する方法は?(または代わりにocamlbuildまたはomakeを使用する方法)
camlp4拡張機能(この場合はpa_deriving)を必要とするocamlプロジェクトをビルドしようとしています。これが私のMakefileです:
このMakefileは機能します。それは仕事を成し遂げます、しかし問題は私が上記のようにハードコードされたパスを持っているということです:/home/p/godi-3.12.1.0/lib/ocaml/site-lib/deriving-ocsigen/pa_deriving.cma OCamlの私のゴディインストール。コードとMakefileを配布して、誰でもそれを使ってビルドできるように、それらを取り除きたいと思います。
これにはomakeまたはocamlbuildを使用する必要がありますか?私はomakeを使いたいのですが、これにはOMakefileで遊んだことがありますが、何も機能しませんでした。何か提案をいただければ幸いです。
更新:次の_tagsファイルでocamlbuildを使用しようとしました:
次のocamlbuildコマンドを使用します。ocamlbuild-use-ocamlfindtest_logic.native-classic-display
そして私は得る:
これを修正するには、_tagsファイルに何を追加する必要がありますか?
ocaml - Ocamlopt と見つからない crt2.o ファイル
Windows 7、64ビット(セルフインストーラー)にOCamlをインストールした後、簡単なexeファイルを作成しようとしました
必要に応じて、ネイティブ コード コンパイラ (ocamlopt) と Visual C++ (Visual Studio 10 がインストールされています) および Microsoft Assembler MASM バージョン 8 (MinGW もインストールされています) を使用しました。OCaml (c:\ProgramFiles\Ocaml\bin)、MinGW (c:\ProgramFiles\MinGW\bin)、MASM (C:\masm32\bin) のパス変数も設定しました。ただし、最善の努力と多くの検索にもかかわらず、エラーメッセージを回避できません
ただし、crt2.o ファイルがある MinGW の lib フォルダーに HelloWorld.ml ファイルを配置する場合は除きます。答えは簡単かもしれませんが、行き詰まっています。どんな助けでも大歓迎です。
makefile - coqtop -R coqdir を使用した Makefile
私はメイクファイルを持っています:
コマンドを追加しcoqtop -R coqdir
ます。コンピューターに物理パスを指定する必要がありますが、このディレクトリはユーザー ディレクトリに依存します。( ~/color/trunk/color/devel/gwen Devel and ~/color/trunk/color CoLoR
)。
物理パスを指定せずにプログラムを呼び出して結合する別の方法はありますか?
ocaml - OCamlbuild と camlp4.macro
OCaml ソース ファイルのいくつかが IFDEF を使用しているプロジェクトがあります。このプロジェクトのすべての .ml ファイルを camlp4.macro で前処理する必要があることを OCamlbuild に伝える簡単な方法はありますか?
ocaml - OCamlbuild と camlp4 のオプション
条件付きコンパイルを有効にするために camlp4.macro を使用しています。「use_jscore」でタグ付けされた特定のファイルを特定の camlp4 オプションで前処理する必要があることを OCamlbuild に通知する際に問題が発生しています。これが私が現在持っているものです:
しかし、これは OCamlbuild によって完全に回避されます。私は ocamlfind を使用しているので、基本的に OCamlbuild に伝えたいことは、「use_jscore」でタグ付けされたすべての OCaml ファイルは、-DUSE_JSCORE オプションも指定された camlp4.macro によって前処理する必要があるということです。
ocaml - 「ocamlfind install」を使用して Ocaml ライブラリをセットアップし、ocamlbuild でライブラリを使用する
ocamlfind install を使用して site-lib にライブラリをインストールするように設定するには、こちらの手順に従いました。2 つのライブラリがありました。1 つは logic と呼ばれ、もう 1 つは boolean と呼ばれます。いずれの場合も、ライブラリに .cmo、.cmx、.cmi、および .mli ファイルをインストールしました。次に例を示します。
次に、ocamlbuild を使用してロジックとブール値に依存する別のプロジェクトをビルドしようとすると、次のエラー メッセージが表示されました。
次に、ロジック プロジェクトとブール プロジェクトの .o ファイルを site-lib のそれぞれの領域にコピーし、コンパイルして正常にリンクしました。
なぜ .o ファイルが必要なのか、なぜ gcc がここに関与しているのか疑問に思っています。
役立つ場合に備えて、これが私の _tags ファイルです。