OCaml Makefile:没有制定目标的规则

OCaml Makefile: No Rule to Make Target

我正在关注此 OCamlbuild example,因此创建了以下 Makefile:

OCB_FLAGS = -use-ocamlfind -I src -I lib
OCB = ocamlbuild $(OCB_FLAGS)

check: ocamlfind query core async
clean: $(OCB) -clean
byte: $(OCB) main.byte
native: $(OCB) main.native

.PHONY: check clean byte native

根目录包含两个子目录,srclibsrc 子目录包含文件 main.ml.

当我执行任何目标时,例如make cleanmake byte 等,我收到错误消息:

make: *** No rule to make target 'ocamlfind', needed by 'check'. Stop.

make: *** No rule to make target 'ocamlbuild', needed by 'byte'. Stop.

如果您能帮助我理解此错误的原因和解决方法,我将不胜感激。谢谢。

这一行:

clean: $(OCB) -clean

表示clean有两个依赖,$(OCB)-clean。所以它首先尝试构建 ocamlbuild

您想要这个,如链接的 makefile 中所示:

clean:
        $(OCB) -clean

这意味着 clean 没有依赖关系,并且是 "done" by 运行 $(OCB) -clean.

请注意,在 $ 字符之前需要一个实际的制表符,而不是 8 个空格。