我发现很多关于如何构建 .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
延长 ocamlc
捡起它们gcc
这些文件实际上是带有 -x c++
ocamlbuild
构建实际上取决于 .h
文件 .h
文件和 .c
在 CSources
领域中 _oasis
)-lstdc++
明令 gcc
作为一个C编译器,它不会这样做。看 超表格绑定 作为这种方法的例子。