Подтвердить что ты не робот

Make: правило вызова правила

В make файле я могу вызвать правило из другого правила?

Аналогично:

rule1:
        echo "bye"
rule2:
        date
rule3:
        @echo "hello"
        rule1
4b9b3361

Ответ 1

Используйте либо зависимости, либо рекурсивное создание для подключения от одного правила к другому.

Зависимости выполнялись бы так (хотя порядок будет другим):

rule1:
        echo "bye"
rule2:
        date
rule3: rule1
        @echo "hello"

Рекурсивный make будет выполнен следующим образом (хотя он включает подпроцесс):

rule1:
        echo "bye"
rule2:
        date
rule3:
        @echo "hello"
        $(MAKE) rule1

Ничто не идеально; действительно, с рекурсивным вы можете столкнуться с серьезными проблемами, если вы построите цикл. Вероятно, вы также должны добавить правило .PHONY, чтобы пометить эти правила выше как синтетические, так что блуждающий rule1 (и т.д.) В каталоге не вызовет путаницы.

Ответ 2

Makefiles не являются процедурными; "правила" не похожи на функции. При этом вы можете указать, что одно правило является обязательным условием другого:

rule1:
    @echo "Rule 1"

rule2: rule1
    @echo "Rule 2"

Если вы делаете make rule2, вы должны увидеть:

Rule 1
Rule 2

Ответ 3

Просто добавьте новое правило с желаемым заказом.

rule1:
        echo "bye"
rule2:
        date
rule3:
        @echo "hello"

rule4: rule3 rule1

Ответ 4

В GNU Make есть две расширенные функции, которые могут это сделать, хотя их следует использовать только в смягчающих обстоятельствах. Это SO имеет рейтинг в google.

Необходимы предварительные условия для правил, но иногда вам необходим пост-реквизит.

Функция GNU Make Call

GNU Сделать функцию Eval

По сути, Eval позволяет вам создавать цели "на лету", а Call позволяет создавать функции типа "определяет".