用ocamlbuild构建C++代码

问题描述 投票:4回答:1

我发现很多关于如何构建 .o 从C源中提取文件,使用 ocamlbuild. 然而,这些并不适用于C++文件,因为它 ocamlbuild 不能开箱即建。

我试着写了一个 myocamlbuild.ml 文件(如下图所示,经请求后)提供了一个从 .cpp.o 而失败 ocamlc 抱怨说它不知道该怎么处理一件事。.cpp 文件(即使编译器被设置为 g++ 通过命令行标志)。)

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 其网站已失效(我无法下载任何来源)。

有什么好办法吗?

c++ ocaml ocamlbuild
1个回答
6
投票

参见 我对类似问题的回答.

我建议采用以下方法。

  1. 将c++文件用 .c 延长 ocamlc 捡起它们
  2. 告知 gcc 这些文件实际上是带有 -x c++
  3. 告知 ocamlbuild 构建实际上取决于 .h 文件 .h 文件和 .cCSources 领域中 _oasis)
  4. 不要忘记链接 -lstdc++ 明令 gcc 作为一个C编译器,它不会这样做。
  5. 使用 cxx_wrapped.h 来获得真正的C++感觉
  6. 利润!

超表格绑定 作为这种方法的例子。

© www.soinside.com 2019 - 2024. All rights reserved.