В make файле я могу вызвать правило из другого правила?
Аналогично:
rule1:
echo "bye"
rule2:
date
rule3:
@echo "hello"
rule1
В make файле я могу вызвать правило из другого правила?
Аналогично:
rule1:
echo "bye"
rule2:
date
rule3:
@echo "hello"
rule1
Используйте либо зависимости, либо рекурсивное создание для подключения от одного правила к другому.
Зависимости выполнялись бы так (хотя порядок будет другим):
rule1:
echo "bye"
rule2:
date
rule3: rule1
@echo "hello"
Рекурсивный make будет выполнен следующим образом (хотя он включает подпроцесс):
rule1:
echo "bye"
rule2:
date
rule3:
@echo "hello"
$(MAKE) rule1
Ничто не идеально; действительно, с рекурсивным вы можете столкнуться с серьезными проблемами, если вы построите цикл. Вероятно, вы также должны добавить правило .PHONY
, чтобы пометить эти правила выше как синтетические, так что блуждающий rule1
(и т.д.) В каталоге не вызовет путаницы.
Makefiles не являются процедурными; "правила" не похожи на функции. При этом вы можете указать, что одно правило является обязательным условием другого:
rule1:
@echo "Rule 1"
rule2: rule1
@echo "Rule 2"
Если вы делаете make rule2
, вы должны увидеть:
Rule 1
Rule 2
Просто добавьте новое правило с желаемым заказом.
rule1:
echo "bye"
rule2:
date
rule3:
@echo "hello"
rule4: rule3 rule1
В GNU Make есть две расширенные функции, которые могут это сделать, хотя их следует использовать только в смягчающих обстоятельствах. Это SO имеет рейтинг в google.
Необходимы предварительные условия для правил, но иногда вам необходим пост-реквизит.
По сути, Eval позволяет вам создавать цели "на лету", а Call позволяет создавать функции типа "определяет".