【发布时间】:2020-05-12 01:53:25
【问题描述】:
我找到了许多关于如何使用 ocamlbuild 从 C 源代码构建 .o 文件的指南。但是,这些不适用于 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,其网站已失效(我无法下载任何资源)。
有什么想法吗?
【问题讨论】:
-
你不应该将编译器设置为 g++ 而不是 gcc 吗?
-
抱歉,打错了。现已更正。
-
能否添加 myocamlbuild.ml 文件的内容以及用于编译的命令行?
-
你可以直接从
ocamlbuild而不是ocamlc调用C编译器。我不知道这是否是正确的解决方案。
标签: c++ ocaml ocamlbuild