Domanda make: regola della regola della chiamata


In un makefile, posso chiamare una regola da un'altra regola?

Simile a:

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

44
2017-12-27 16:09


origine


risposte:


Utilizzare dipendenze o fare ricorsivamente per connettersi da una regola all'altra.

Le dipendenze sarebbero fatte in questo modo (anche se l'ordine sarà diverso):

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

La marca ricorsiva sarebbe fatta in questo modo (sebbene implichi un sottoprocesso):

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

Nessuno dei due è perfetto; anzi, con la ricorsiva puoi entrare in problemi significativi se costruisci un ciclo. Probabilmente dovresti anche aggiungere un .PHONY Regola in modo tale da marcare quelle regole sopra come sintetiche, in modo che un vagabondo rule1 (ecc.) nella directory non causerà confusione.


66
2017-12-27 16:11



I makefile non sono procedurali; le "regole" non sono come le funzioni. Detto questo, puoi specificare che una regola è un prerequisito di un'altra:

rule1:
    @echo "Rule 1"

rule2: rule1
    @echo "Rule 2"

Se fate make rule2, tu dovresti vedere:

Rule 1
Rule 2

18
2017-12-27 16:12



Basta aggiungere una nuova regola con l'ordine desiderato ..

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

rule4: rule3 rule1

14
2017-11-09 19:31



Ci sono due funzioni avanzate in GNU Make che possono farlo, sebbene debbano essere utilizzate solo in circostanze attenuanti. Questo SO è il più votato in google.

I prerequisiti delle regole sono più raccomandati, ma a volte è necessario un post-requisito.

GNU Make Call

GNU Make Eval function

Essenzialmente, Eval ti consente di creare obiettivi al volo e Call consente di creare funzioni come "define".


2
2017-10-29 15:42