jrk*_*jrk 6 ocaml ocamlbuild ocamlfind ocaml-batteries
我试图保持我的项目自包含,在项目存储库中构建和引用所有主要的第三方库依赖项.我的项目的主要ocaml部分依赖于ocamlbuild.
但是对于像Batteries Included这样的复杂软件包,人们强烈期望通过ocamlfind将它们链接到一个项目中.ocamlfind似乎假设将在全局安装软件包.(我意识到它允许环境变量及其conf指向备用位置,但它基本上似乎仍然围绕包全局配置的假设构建 - 它没有相应的-I
或-L
标志来动态扩展包的搜索路径,例如.有可能设置环境变量来动态覆盖ocamlfind配置来搜索项目本地树,但这比仅仅参数更难以实现,而且如果没有同时删除它也似乎很难主要系统包的可发现性site-lib
,也可能是必需的.)
对于使用ocamlbuild的项目,在项目本地树中构建和构建非平凡的第三方软件包有什么理智的策略?
使用环境变量(或单独的 findlib.conf)是一种方法(而且很简单)。并且它不需要删除全局包的可发现性,请参阅path
和destdir
in findlib.conf
(分别OCAMLPATH
为OCAMLFIND_DESTDIR
环境变量)的参考手册。
基本上,您destdir
在安装项目本地包时设置为本地路径,并在使用它们时添加到path
前面(不要忘记创建stublibs
in destdir
(如果您正在构建字节码二进制文件,请将其添加到ld.conf
instdlib
中))。
PS我认为这是ocsigen-bundler中使用的方法。
如果您遇到任何问题,请告知(因为我也有兴趣使用相同的方法)。