2010-03-03 62 views
2

成功reorganized my project for ocamlbuild with subdirectories并使用ocamlfind后,我发现很难构建顶层。ocamlbuild;建立顶层

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

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 

我失去了一些东西在建立顶级的构建,但我无法在网上找到可靠的资源。谢谢。

回答

3
  • 我认为cutil.ml描述了libcs​​ide.a的ocaml端 - 正确吗?
  • 您是否将Cutil放入了mltop?
  • 根据您当前的插件cutil ocaml的图书馆将无法链接libcs​​ide.a(dep仅指示ocamlbuild打造它,而不是链接)
  • 这是建立项目本地ocaml的图书馆有一个简单的(工作)的方式C桩。在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:

    ​​

    在此设置下它会在顶层使用(注意,没有必要把Linuxnet到.mltop原因linuxnet.cma将加入由use_linuxnet标记(ocaml_lib生成的链接用法))。

+0

1.公用事业确实 2.是的。 3.是的,这是做到了。谢谢。我曾经在旗帜上添加了A“libcs​​ide”,但它没有奏效。我错过了ocaml_lib。谢谢! – nlucaroni 2010-03-04 13:21:44