【问题标题】:How can the ocamlfind/ocamlbuild toolchain be used with project-local copies of packages?ocamlfind/ocamlbuild 工具链如何与包的项目本地副本一起使用?
【发布时间】:2011-09-01 18:45:34
【问题描述】:

我正在尝试保持我的项目自包含,在项目存储库中构建和引用所有主要的 3rd 方库依赖项。我项目的主要 ocaml 部分依赖于 ocamlbuild。

但是对于像 Batteries Included 这样的复杂软件包,似乎强烈期望它们通过 ocamlfind 链接到项目中。 ocamlfind 似乎假设软件包将被全局安装。 (我意识到它允许环境变量及其 conf 指向备用位置,但它基本上似乎仍然是围绕包是全局配置的假设构建的——它没有等效于 -I-L 的标志来动态扩展例如,包的搜索路径。可以设置环境变量来动态覆盖 ocamlfind 配置来搜索项目本地树,但这比单纯的参数要尴尬得多,而且看起来也很有挑战性这样做不会同时删除主系统包在主site-lib 中的可发现性,这可能也是需要的。)

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

【问题讨论】:

    标签: ocaml ocamlbuild ocaml-batteries ocamlfind


    【解决方案1】:

    使用环境变量(或单独的 findlib.conf)是一种可行的方法(而且很简单)。而且它不需要删除全局包的可发现性,请参阅findlib.conf 中的pathdestdir 的参考手册(分别为OCAMLPATHOCAMLFIND_DESTDIR 环境变量)。

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

    PS 我认为这是ocsigen-bundler 中使用的方法。

    如果您遇到任何问题,请告诉我(因为我也有兴趣使用同样的方法)。

    【讨论】:

    • 到目前为止我还没有走这条路,所以我确认成功的速度很慢,但我希望它应该会奏效。
    猜你喜欢
    • 2014-10-03
    • 1970-01-01
    • 2019-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-12
    • 2020-08-22
    相关资源
    最近更新 更多