Makefile 重复推理规则

Makefile 重复推理规则,makefile,ocaml,Makefile,Ocaml,mymakefile中有以下几种推理规则: %.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

my
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

我不是
make
方面的专家,但据我所知,如果
make
发现满足所有先决条件的规则,它将使用它。因此,您与cmi的规则将不会被接受

至于问题的ocaml部分,
cmx
,应取决于
cmi
,如果存在
mli
,如果不存在,则不是故障,ocaml不会检查模块接口。用make语言来表达这一点并不容易


我建议您要么使用现有的Makefile解决方案,要么使用
ocamlbuild
,甚至
oasis
。事实上,我强烈反对重新设计构建系统。首先,你把宝贵的时间花在一项已经解决的任务上。其次,您的解决方案仍将落后于现有的解决方案,主要原因是缺乏测试和总体努力。有太多错误打包的ocaml包,所有这些包都使用它们的定制和错误构建系统。不要重新发明自行车,只要学会骑:)

我不是
make
方面的专家,但据我所知,如果
make
找到一条满足所有先决条件的规则,它就会使用它。因此,您与cmi的规则将不会被接受

至于问题的ocaml部分,
cmx
,应取决于
cmi
,如果存在
mli
,如果不存在,则不是故障,ocaml不会检查模块接口。用make语言来表达这一点并不容易

我建议您要么使用现有的Makefile解决方案,要么使用
ocamlbuild
,甚至
oasis
。事实上,我强烈反对重新设计构建系统。首先,你把宝贵的时间花在一项已经解决的任务上。其次,您的解决方案仍将落后于现有的解决方案,主要原因是缺乏测试和总体努力。有太多错误打包的ocaml包,所有这些包都使用它们的定制和错误构建系统。不要重新发明自行车,只要学会骑:)