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