我的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
吗?
答案 0 :(得分:3)
我不是make
的专家,但据我了解,如果make
找到满足所有先决条件的规则,它将使用它。因此,您的cmi规则将不会被采用。
至于问题的ocaml部分,cmx
,如果存在cmi
,则应该依赖于mli
,如果它不是,那么它不是失败,并且ocaml不会检查模块接口。用make语言表达这一点并不是一件容易的事。
我建议您使用现有的Makefile解决方案,或使用ocamlbuild
,甚至oasis
。实际上,我强烈反对重建构建系统。首先,你将宝贵的时间花在一项任务上,这已经解决了。其次,您的解决方案将落后于现有解决方案,主要是由于缺乏测试和总体努力。有这么多错误打包的ocaml包,所有使用他们的自定义和bugy构建系统。不要重新发明自行车,只要学习如何骑行:)