告诉ocamlbuild在哪里找到模块

时间:2018-01-18 11:19:47

标签: linker ocaml ocamlbuild

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

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

如果module.ml位于subproject2main.ml旁边,我只需使用open中的subproject2/main.ml指令:

(*subproject2/main.ml *)
open Module

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

1 个答案:

答案 0 :(得分:0)

虽然我没有找到任何直接的方式来包含或直接链接源文件,但我想出了一种方法来有效地包含兄弟目录中的模块。

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

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,因此需要进行手动链接编辑才能最终使用main.byte中常用的subproject2符号链接。

由于我希望能够使用make,因此我在Makefile中编写了以下subproject2/,以便通过简单地运行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