成功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
我在为顶级设置构建时遗漏了一些东西,但我无法在线找到可靠的资源。感谢。
答案 0 :(得分:3)
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}}用法))。