2016-02-28 44 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構建系統。不要重新發明自行車,只要學會如何騎:) :)