使用带有ocamlbuild的外部库

pbp*_*pbp 4 ocaml makefile ocamlbuild

我正在尝试使用ocamlbuild而不是make,但我无法正确链接我的目标文件与外部.cma库.似乎ocamlbuild首先尝试确定依赖关系然后忽略标记-L/path/to/lib.cma.随着make我只是路过所有必需的目录与-I-L标志来ocamlc,但这些似乎并没有一起工作ocamlbuild- ocamlc不断失败,因为它无法找到必要的库.

did*_*erc 7

您至少有两种方法可以将参数传递给ocamlbuild,以便将您的库存入帐户:

  1. 您可以使用ocamlbuild的命令行参数:

    $ ocamlbuild -cflags '-I /path/to/mylibrary' -lflags '-I /path/to/mylibrary mylibrary.cma' myprogram.byte
    
    Run Code Online (Sandbox Code Playgroud)

    更换.cma.cmxa的可执行文件了.

  2. 使用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"
      | _ -> ()
    
    Run Code Online (Sandbox Code Playgroud)

    _tags:

    <glob pattern>: use_mylibrary
    
    Run Code Online (Sandbox Code Playgroud)

    ocaml_lib在指令myocamlbuild.ml告诉库名为"在MyLibrary"工具(与具体实现在结束.cma.cmxa或其他-剖析,插件)位于目录"/路径/到/在MyLibrary".

    glob pattern项目目录中对应的所有文件都将与"mylibrary"的使用相关联ocamlbuild,并使用ad hoc参数进行编译(因此您无需担心本机或字节目标).例如:

    <src/somefile.ml>: use_mylibrary
    
    Run Code Online (Sandbox Code Playgroud)

注意:如果库位于编译器已知的路径中(通常/usr/lib/ocaml/usr/local/lib/ocaml),则路径前缀可以安全地替换为+符号,因此/usr/lib/ocaml/mylibrary变为+mylibrary.