4

.oを使用して C ソースからファイルをビルドする方法に関する多くのガイドを見つけましたocamlbuildocamlbuildただし、これらはそのままではビルドできないC++ ファイルには適用されません。

toからのルールを提供するファイルを書き込もうとしましたがmyocamlbuild.ml(リクエスト後に以下に表示) 、ファイルをどう処理するかわからないという不平を言って失敗します (コンパイラがコマンド ライン フラグを介して に設定されている場合でも)。.cpp.oocamlc.cppg++

open Ocamlbuild_plugin ;;

let ext_obj = !Options.ext_obj;;
let x_o = "%"-.-ext_obj;;

rule "ocaml C++ stubs: cpp -> o"
  ~prod:x_o
  ~dep:"%.cpp"
  begin fun env _build ->
    let c = env "%.cpp" in
    let o = env x_o in
    let comp = 
      if Tags.mem "native" (tags_of_pathname c) then !Options.ocamlopt else !Options.ocamlc in
    let cc = 
      Cmd(S[comp; T(tags_of_pathname c++"c"++"compile"); A"-custom"; A"-cc"; A"g++"; A"-c"; Px c]) in
    if Pathname.dirname o = Pathname.current_dir_name then cc
    else Seq[cc; mv (Pathname.basename o) o]
  end;;

ファイルlibsoundness.clibは一連のファイルで構成されてい.oます。

するとocamlbuild libsoundness.a、次の出力が得られます。

Finished, 0 targets (0 cached) in 00:00:00.
+ /usr/bin/ocamlc.opt -custom -cc g++ -c src/soundness/proof_aut.cpp
/usr/bin/ocamlc.opt: don't know what to do with src/soundness/proof_aut.cpp.
Usage: ocamlc <options> <files>
<snipped long list of ocamlc options>

C ++の他の唯一の解決策はocamlbuild-ctools、Webサイトが機能していないようです(ソースをダウンロードできませんでした)。

何か案は?

4

1 に答える 1

6

参照。同様の質問に対する私の答え

次のアプローチをお勧めします。

  1. C++ ファイルに.c拡張子を付けて名前を付けて、ocamlcそれらをピックアップします
  2. gccそれらが実際にはC++ファイルであることを伝えます-x c++
  3. ocamlbuildビルドが実際にファイルに依存していることを伝え.hます (たとえば、 のフィールドに.hファイルを一緒にリストします) 。.cCSources_oasis
  4. -lstdc++明示的にリンクすることを忘れないでgccください
  5. cxx_wrapped.hを使用して、実際の C++ の感覚を得る
  6. 利益!!

このアプローチの例として、ハイパーテーブル バインディングを参照してください。

于 2014-02-13T05:08:47.890 に答える