Marka: rule call rule

W pliku makefile, Czy Mogę wywołać regułę z innej reguły?

Podobne do:

rule1:
        echo "bye"
rule2:
        date
rule3:
        @echo "hello"
        rule1
 46
Author: Eric3, 2011-12-27

4 answers

Albo używaj zależności, albo rekurencyjnie łącz się z jedną regułą do drugiej.

Zależności byłyby zrobione w ten sposób (choć kolejność będzie inna):

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

Wykonanie rekurencyjne byłoby wykonane w ten sposób (choć wiąże się to z podprocesem):

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

Żaden z nich nie jest doskonały; w rzeczywistości, dzięki rekurencyjnemu make możesz mieć poważne problemy, jeśli zbudujesz pętlę. Prawdopodobnie powinieneś również dodać .PHONY regułę, aby oznaczyć te zasady powyżej jako syntetyczne, tak aby stray rule1 (itd.) w katalogu nie spowoduje zamieszania.

 69
Author: Donal Fellows,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-12-27 16:18:38

Pliki Makefile nie są proceduralne; "reguły" nie są podobne do funkcji. To powiedziawszy, możesz określić, że jedna reguła jest warunkiem wstępnym innej:

rule1:
    @echo "Rule 1"

rule2: rule1
    @echo "Rule 2"

Jeśli to zrobisz make rule2, powinieneś zobaczyć:

Rule 1
Rule 2
 18
Author: Oliver Charlesworth,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-12-27 16:12:28

Po prostu dodaj nową regułę z zamówieniem, które chcesz..

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

rule4: rule3 rule1
 16
Author: John Eikenberry,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-11-09 19:31:42

W GNU Make są dwie zaawansowane funkcje, które mogą to zrobić, chociaż powinna być używana tylko w okolicznościach łagodzących. To tak jest Najwyżej oceniane w google.

Zasady wstępne są bardziej zalecane, ale czasami trzeba Post-wymagane.

GNU Make Call function

GNU Make Eval function

Zasadniczo Eval pozwala na budowanie celów w locie, a Call pozwala na tworzenie funkcji typu "defines".

 3
Author: kevinf,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-10-29 15:42:07