gpt4 book ai didi

makefile - 在 ocamlbuild 中使用外部库

转载 作者:行者123 更新时间:2023-12-03 13:58:31 25 4
gpt4 key购买 nike

我正在尝试使用 ocamlbuild而不是 make ,但我无法正确链接我的目标文件与外部 .cma图书馆。好像ocamlbuild尝试首先确定依赖关系,然后忽略诸如 -L/path/to/lib.cma 之类的标志.与 make我只是通过 -I 传递所有必要的目录和 -L标记到 ocamlc ,但这些似乎不适用于 ocamlbuild -- ocamlc一直失败,因为它找不到必要的库。

最佳答案

您至少有 2 种方法可以将参数传递给 ocamlbuild 以将您的库考虑在内:

  • 可以使用ocamlbuild的命令行参数:
    $ ocamlbuild -cflags '-I /path/to/mylibrary' -lflags '-I /path/to/mylibrary mylibrary.cma' myprogram.byte

    替换 .cma来自 .cmxa对于 native 可执行文件。
  • 使用 myocamlbuild.ml 文件让 ocamlbuild “知道”该库,并在 _tag 文件中标记需要它的文件:

    myocamlbuild.ml :
    open Ocamlbuild_plugin
    open Command

    dispatch begin function
    | After_rules ->
    ocaml_lib ~extern:true ~dir:"/path/to/mylibrary" "mylibrary"
    | _ -> ()

    _tags :
    <glob pattern>: use_mylibrary
    ocaml_lib myocamlbuild.ml 中的说明告诉工具名为“mylibrary”的库(具体实现以 .cma.cmxa 或其他 - 分析、插件结尾)位于目录“/path/to/mylibrary”中。
    glob pattern对应的所有文件在项目目录中将关联到“mylibrary”的使用 ocamlbuild ,并使用临时参数编译(因此您无需担心 native 或字节目标)。
    前任:
    <src/somefile.ml>: use_mylibrary

  • 注意:如果库位于编译器已知的路径中(通常是 /usr/lib/ocaml/usr/local/lib/ocaml ),那么路径前缀可以安全地替换为 +签名,所以 /usr/lib/ocaml/mylibrary变成 +mylibrary .

    关于makefile - 在 ocamlbuild 中使用外部库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14539899/

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