我正在尝试使用ocamlbuild而不是make,但我无法将我的目标文件与外部.cma库正确链接。似乎ocamlbuild首先尝试确定依赖关系,然后忽略-L/path/to/lib.cma. make我只是将所有必要的目录与-I和-L标志一起传递给,ocamlc但这些似乎不起作用ocamlbuild-ocamlc因为找不到必要的库,所以一直失败。
1951 次
1 回答
9
您至少有 2 种方法可以将参数传递给 ocamlbuild,以便它考虑您的库:
可以使用 ocamlbuild 的命令行参数:
$ ocamlbuild -cflags '-I /path/to/mylibrary' -lflags '-I /path/to/mylibrary mylibrary.cma' myprogram.byte替换为本
.cma机.cmxa可执行文件。使用 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”的库(特定实现以.cmaor.cmxa或其他结尾 - 分析、插件)位于目录“/path/to/mylibrary”中。项目目录中对应的所有文件
glob pattern都将与“mylibrary”的使用相关联ocamlbuild,并使用ad hoc参数进行编译(因此您无需担心本机或字节目标)。前任:<src/somefile.ml>: use_mylibrary
注意:如果库位于编译器已知的路径中(通常是/usr/lib/ocaml或/usr/local/lib/ocaml),则路径前缀可以安全地替换为+符号,因此/usr/lib/ocaml/mylibrary变为+mylibrary.
于 2013-01-26T21:26:41.190 回答