ocamlbuild;建设顶级

时间:2010-03-03 19:01:03

标签: build-automation ocaml compilation ocamlbuild

成功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

我在为顶级设置构建时遗漏了一些东西,但我无法在线找到可靠的资源。感谢。

1 个答案:

答案 0 :(得分:3)

  • 我认为cutil.ml描述了libcs​​ide.a的ocaml端 - 正确吗?
  • 你把Cutil放入mltop吗?
  • 使用您当前的插件cutil ocaml库不会链接libcs​​ide.a in(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标记链接(使用{{生成) 1}}用法))。