2016-02-28 47 views
0

有我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

回答

3

我不是make的专家,但据我了解,如果make发现满足所有先决条件的规则,它将使用它。所以你的规则与cmi不会被采取。

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

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