2016-02-28 2 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, и все они используют свою обычную и жесткую систему сборки. Не изобретайте велосипед, просто научитесь кататься :)

Смежные вопросы