make: rule call rule - PullRequest
       3

make: rule call rule

59 голосов
/ 27 декабря 2011

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

Аналогично:

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

Ответы [ 4 ]

91 голосов
/ 27 декабря 2011

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

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

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

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

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

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

22 голосов
/ 09 ноября 2016

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

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

rule4: rule3 rule1
19 голосов
/ 27 декабря 2011

Makefiles не являются процедурными;«правила» не похожи на функции.Тем не менее, вы можете указать, что одно правило является предпосылкой другого:

rule1:
    @echo "Rule 1"

rule2: rule1
    @echo "Rule 2"

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

Rule 1
Rule 2
3 голосов
/ 29 октября 2015

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

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

GNU Make Call function

GNU Make Eval function

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...