我有一个OCaml项目,我使用ocamlbuild
。
在这个项目中,我有两个子项目subproject1
和subproject2
。
subproject2
需要使用Module
中名为subproject1
的模块。
总而言之,我有以下结构:
project/
|
|-- subproject1
| |
| |-- module.ml
|
|-- subproject2
|
|-- main.ml
如果module.ml
位于subproject2
,main.ml
旁边,我只需使用open
中的subproject2/main.ml
指令:
(*subproject2/main.ml *)
open Module
但由于module.ml
位于subproject1
,我如何告诉ocamlbuild
打开subproject1/module.ml
?
答案 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