makefile чем make: правило вызова правила




чем отличается did от made (4)

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

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

rule4: rule3 rule1

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

Похожий на:

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

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

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

Функция GNU Make Call

Функция GNU Make Eval

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


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

rule1:
    @echo "Rule 1"

rule2: rule1
    @echo "Rule 2"

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

Rule 1
Rule 2

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

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

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

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

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

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





makefile