如何将ocamlfind/ocamlbuild工具链用于包的项目本地副本?

如何将ocamlfind/ocamlbuild工具链用于包的项目本地副本?,ocaml,ocamlbuild,ocaml-batteries,ocamlfind,Ocaml,Ocamlbuild,Ocaml Batteries,Ocamlfind,我正在努力使我的项目保持独立,在项目存储库中构建和引用所有主要的第三方库依赖项。我的项目的主要ocaml部分依赖于ocamlbuild 但对于包括电池在内的复杂软件包,人们似乎强烈期望通过ocamlfind将它们链接到一个项目中。ocamlfind似乎假定软件包将在全球范围内安装。(我意识到它允许环境变量及其配置指向其他位置,但从根本上看,它似乎仍然是基于包是全局配置的假设构建的——例如,它没有等价的-I或-L标志来动态扩展包的搜索路径t使用环境变量动态覆盖ocamlfind配置以搜索项目本地树

我正在努力使我的项目保持独立,在项目存储库中构建和引用所有主要的第三方库依赖项。我的项目的主要ocaml部分依赖于ocamlbuild

但对于包括电池在内的复杂软件包,人们似乎强烈期望通过ocamlfind将它们链接到一个项目中。ocamlfind似乎假定软件包将在全球范围内安装。(我意识到它允许环境变量及其配置指向其他位置,但从根本上看,它似乎仍然是基于包是全局配置的假设构建的——例如,它没有等价的
-I
-L
标志来动态扩展包的搜索路径t使用环境变量动态覆盖ocamlfind配置以搜索项目本地树,但这比仅使用参数要麻烦得多,而且在不同时删除主
站点库中的主系统包的可发现性的情况下这样做似乎也很困难,这也可能是错误的需要。)


对于使用ocamlbuild的项目,在项目本地树中构建和构建非平凡的第三方包的明智策略是什么?

使用环境变量(或单独的findlib.conf)是一种方法(而且很简单)。而且它不需要删除全局包的可发现性,请参见
findlib.conf
中的
path
destdir
参考手册(分别是
OCAMLPATH
OCAMLFIND\u destdir
环境变量)

基本上,在安装项目本地包时,您可以将
destdir
设置为本地路径,并在使用它们时将其前置到
path
(如果您正在构建字节码二进制文件,请不要忘记在
destdir
中创建
stublib
(并将其添加到
ld.conf
中)

PS我认为这是在中使用的方法


请告诉我您是否遇到任何问题(因为我也对使用相同的方法感兴趣)。

到目前为止,我还没有走上这条路,所以我在确认成功方面进展缓慢,但我希望它会奏效。