告诉 ocamlbuild 在哪里可以找到模块

Tell ocamlbuild where to find module

我有一个 OCaml 项目,我使用 ocamlbuild。 在这个项目中,我有两个子项目,subproject1subproject2subproject2 需要使用 subproject1 中名为 Module 的模块。 综上所述,我有以下结构:

project/
|
|-- subproject1
|   |
|   |-- module.ml
|
|-- subproject2
    |
    |-- main.ml

如果 module.ml 位于 subproject2 中,在 main.ml 旁边,我会简单地使用 subproject2/main.ml 中的 open 指令:

(*subproject2/main.ml *)
open Module

但是由于 module.ml 位于 subproject1,我如何告诉 ocamlbuild 打开 subproject1/module.ml

虽然我还没有找到任何直接包含或直接 link 源文件的方法,但我想出了一种有效包含同级目录中的模块的方法。

再一次,这里是项目的结构:

project/
|
|-- subproject1
|   |
|   |-- module.ml
|
|-- subproject2
    |
    |-- main.ml

project 目录,以下 ocamlbuild 命令将编译整个项目,以 subproject2/main.ml 作为目标,subproject2/_build/ 作为输出构建目录:

ocamlbuild -I subproject1 subproject2/_build/ subproject2/main.byte

然而,预期的 main.byte 文件将输出为 subproject2/_build/subproject2/main.byte,因此需要手动 link 编辑以最终得到通常的 main.byte symlink 在 subproject2.


因为我喜欢可以使用make,所以我在subproject2/中写了下面的Makefile,以便通过运行编译subproject2/ make 从内部看,因为 make 应该有效。

all:
    # Move to project/
    cd ..;\
    # Run the ocamlbuild command
    ocamlbuild -I subproject1 subproject2/_build/ subproject2/main.byte\
    # Go back into subproject2
    cd subproject2;\
    # Try to remove the existing symlink, mute stderr, and continue on error
    rm main.byte 2> /dev/null || true;\
    # Create the desired symlink
    ln -s _build/subproject2/main.byte main.byte