首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用ocamlbuild构建C++代码

用ocamlbuild构建C++代码
EN

Stack Overflow用户
提问于 2014-02-12 13:06:58
回答 1查看 647关注 0票数 4

我已经找到了许多关于如何使用.o从C源构建ocamlbuild文件的指南。但是,这些不适用于C++文件,而ocamlbuild无法直接构建这些文件。

我尝试编写一个myocamlbuild.ml文件(在请求之后显示),提供从.cpp.o的规则,但是ocamlc抱怨它不知道如何处理.cpp文件(即使编译器通过命令行标志设置为g++ ),这都失败了。

代码语言:javascript
复制
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时,我得到以下输出:

代码语言:javascript
复制
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 (我无法下载任何来源)。

有什么想法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-02-13 05:08:47

请参阅我对类似问题的回答

我建议采取以下办法:

  1. 将具有c++扩展名的.c文件命名为ocamlc来获取它们
  2. 告诉gcc,这些实际上是带有-x c++的c++文件
  3. 告诉ocamlbuild,构建实际上依赖于.h文件(例如,在_oasis中的CSources字段中列出.h文件和.c )
  4. 不要忘了链接-lstdc++,因为gcc不会那么做,因为它是一个C编译器
  5. 使用wrapped.h来获得真正的C++感觉
  6. 利润!

请参阅超表绑定作为此方法的示例。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21728826

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档