我发现了很多关于如何使用ocamlbuild
从C源文件构建.o
文件的指南。这些不适用于C++文件,但是,ocamlbuild
无法在开箱即可使用。使用ocamlbuild编译C++代码
我试图写一个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
其网站已经被淘汰(我无法下载任何来源)。
任何想法?
不应该将编译器设置为g ++而不是gcc? –
对不起,这是一个错字。现在更正。 – Nikos
您可以添加myocamlbuild.ml文件的内容以及用于编译的命令行吗? –