gpt4 book ai didi

c - 如何使 OCamlbuild 将 C 文件编译并链接到 OCaml 项目中?

转载 作者:太空狗 更新时间:2023-10-29 17:21:26 24 4
gpt4 key购买 nike

我正在尝试从 main.ml 构建一个 OCaml 二进制文件 main.native,它也依赖于单个 C 文件 custom.c 实现一个新的原语。这个 C 文件需要编译和链接。有没有办法只使用 _tags 文件来做到这一点?明显的问题是 OCamlbuild 在扫描 main.ml 时没有检测到依赖关系,因此需要明确告知依赖关系。

ocamlbuild main.native

OCamlbuild 知道将 *.c 文件编译为 *.o 文件的规则,但我不知道如何添加依赖项。

最佳答案

有一个number of resources out there .

第一件事是您需要标记 main.native 以创建对 c-stub 的依赖并相应地链接。 (顺便说一下,这里假定 c 库名为 cstub,但它可以是您想要的任何名称)。

_tags :

<*.{byte,native}> : use_cstub
<**/*.cm{x,}a> : use_cstub

然后,在 myocamlbuild.ml 中创建一个 c 库对标记内容的依赖,

dep ["link";"ocaml";"use_cstub"] ["libcstub.a"]

OCamlbuild has rules for creating library files (*.so 和 *.a),但您需要在 .clib 文件中添加要构建的文件列表,

cstub.clib :

cobjfile1.o
cobjfile2.o
...

任何头文件也需要从主目录复制到 _build/ 目录。这是通过指定它们依赖于 c 中的编译来完成的(在 myocamlbuild.ml 中,其中 headers 是命名项目中的头文件的字符串列表。

dep ["c"; "compile"] headers;

最后,在我们将项目与 c-stub 库链接时添加标志(也在 myocamlbuild.ml 中),

flag ["link";"ocaml";"use_cstub"] (S[A"-dllib";A"-lcstub";A"-cclib";A"-lcstub"]);

关于c - 如何使 OCamlbuild 将 C 文件编译并链接到 OCaml 项目中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19644451/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com