已成功使用子目录重新组织了我的 ocamlbuild 项目 https://stackoverflow.com/questions/2209532/properly-compiling-modules-in-subfolders-ocamlbuild使用 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"];
and in _tags
,
<utilities.*> : use_cutil
<**/*.top> : use_str, use_unix, use_cutil, use_curl, use_mysql
最后,在libcside.clib
,
cutil.o
我在设置顶层构建时遗漏了一些东西,但我无法在网上找到可靠的资源。谢谢。
- 我认为 cutil.ml 描述了 libcside.a 的 ocaml 方面 - 正确吗?
- 你把Cutil放入mltop了吗?
- 使用您当前的插件 cutil ocaml 库将不会链接 libcside.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.club 中:
linuxnet_c.o
请注意,C 源代码被称为linuxnet_c.c
这样生成的目标文件就不会覆盖 linuxnet.ml 中的目标文件(反之亦然)。最后在 _tags 中:
true: use_linuxnet
通过此设置,它将在顶层可用(请注意,无需将Linuxnet
到 .mltop 中,因为 linuxnet.cma 将被添加到链接中use_linuxnet
标志(生成于ocaml_lib
用法))。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)