重复的推理规则

时间:2016-02-28 15:58:02

标签: makefile ocaml

我的makefile中有几个推理规则如下:

%.ml: %.mll
    $(OCAMLLEX) $*.mll
%.ml %.mli: %.mly
    $(OCAMLYACC) $*.mly
%.cmo: %.ml %.cmi
    $(OCAMLC) $(OCAMLFLAGS) -c $*.ml
%.cmx: %.ml %.cmi
    $(OCAMLOPT) $(OCAMLFLAGS) -c $*.ml
%.cmi: %.mli
    $(OCAMLC) $(OCAMLFLAGS) -c $*.mli
%.cmo: %.ml
    $(OCAMLC) $(OCAMLFLAGS) -c $*.ml
%.cmx: %.ml
    $(OCAMLOPT) $(OCAMLFLAGS) -c $*.ml

我只是想知道那边是否有重复。例如,%.cmx有两个规则,哪些规则计数? .cmx取决于.cmi吗?

1 个答案:

答案 0 :(得分:3)

我不是make的专家,但据我了解,如果make找到满足所有先决条件的规则,它将使用它。因此,您的cmi规则将不会被采用。

至于问题的ocaml部分,cmx,如果存在cmi,则应该依赖于mli,如果它不是,那么它不是失败,并且ocaml不会检查模块接口。用make语言表达这一点并不是一件容易的事。

我建议您使用现有的Makefile解决方案,或使用ocamlbuild,甚至oasis。实际上,我强烈反对重建构建系统。首先,你将宝贵的时间花在一项任务上,这已经解决了。其次,您的解决方案将落后于现有解决方案,主要是由于缺乏测试和总体努力。有这么多错误打包的ocaml包,所有使用他们的自定义和bugy构建系统。不要重新发明自行车,只要学习如何骑行:)