Я нашел много руководств о том, как создавать .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
, чей веб-сайт больше не работает (я не смог скачать исходники).
Любые идеи?
ocamlbuild
вместоocamlc
. Хотя я не знаю, правильное ли это решение. - person nlucaroni   schedule 12.02.2014