【问题标题】:ocamlbuild; building toplevelocamlbuild;建筑顶层
【发布时间】:2010-03-03 19:01:02
【问题描述】:

在成功reorganized my project for ocamlbuild with subdirectories 并使用 ocamlfind 之后,我发现构建顶层非常困难。

我已经构建了一个 .mltop 文件,其中包含将包含的所有模块并将包添加到 _tags,但构建不起作用。它找不到使用其中一个模块编译的 C 函数。启用-classic-display 后,我可以看到该文件libcside.a 没有被包含,甚至根本没有被编译!将c文件作为依赖添加到myocamlbuild.ml by,

flag ["link"; "ocaml"; "use_cutil"] (S [A"-cclib"; A"-L."; ]);
dep  ["link"; "ocaml"; "use_cutil"] ["libcside.a"];

_tags

<utilities.*> : use_cutil
<**/*.top> : use_str, use_unix, use_cutil, use_curl, use_mysql

最后,在libcside.clib

cutil.o

我在为顶层设置构建时遗漏了一些东西,但我在网上找不到可靠的资源。谢谢。

【问题讨论】:

    标签: build-automation ocaml compilation ocamlbuild


    【解决方案1】:
    • 我认为 cutil.ml 描述了 libcs​​ide.a 的 ocaml 部分 - 正确吗?
    • 您是否将 Cutil 放入 mltop 中?
    • 使用您当前的插件,cutil ocaml 库不会链接 libcs​​ide.a(dep 仅指示 ocamlbuild 构建它,而不是链接)
    • 这是一种使用 C 存根构建项目本地 ocaml 库的简单(且有效)方法。在 myocamlbuild.ml 中:

      ocaml_lib "linuxnet";
      let liblinuxnet_stubs = "liblinuxnet_stubs." ^ !Options.ext_lib in
      flag ["link"; "ocaml"; "use_linuxnet"] (S[A"-cclib"; A liblinuxnet_stubs;]);
      dep  ["link"; "ocaml"; "use_linuxnet"] [liblinuxnet_stubs];
      

      在 liblinuxnet_stubs.clib 中:

      linuxnet_c.o
      

      请注意,C 源代码称为linuxnet_c.c,因此生成的目标文件不会覆盖来自 linuxnet.ml 的目标文件(反之亦然)。最后在 _tags 中:

      true: use_linuxnet
      

      通过此设置,它将在顶层可用(请注意,无需将 Linuxnet 放入 .mltop 中,因为 linuxnet.cma 将通过 use_linuxnet 标志添加到链接(使用 ocaml_lib 生成)) .

    【讨论】:

    • 1.公用事业 2. 是的。 3. 是的,它做到了。谢谢。我已将 A"libcs​​ide" 添加到标志中,但它没有用。我错过了 ocaml_lib。谢谢!
    猜你喜欢
    • 2010-12-24
    • 1970-01-01
    • 2022-01-02
    • 1970-01-01
    • 2019-07-20
    • 2018-01-02
    • 1970-01-01
    • 1970-01-01
    • 2016-07-15
    相关资源
    最近更新 更多