In un makefile, posso chiamare una regola da un'altra regola?fare: regola chiamata regola
Simile a:
rule1:
echo "bye"
rule2:
date
rule3:
@echo "hello"
rule1
In un makefile, posso chiamare una regola da un'altra regola?fare: regola chiamata regola
Simile a:
rule1:
echo "bye"
rule2:
date
rule3:
@echo "hello"
rule1
Sia dipendenze uso o fare ricorsiva di connettersi da una regola a un altro.
dipendenze sarebbe stato fatto in questo modo (anche se l'ordine sarà diverso):
rule1:
echo "bye"
rule2:
date
rule3: rule1
@echo "hello"
ricorsivo make sarebbe fatto come questo (anche se lo fa coinvolgere un sottoprocesso):
rule1:
echo "bye"
rule2:
date
rule3:
@echo "hello"
$(MAKE) rule1
Né è perfetta; anzi, con la ricorsiva puoi entrare in problemi significativi se costruisci un ciclo. Probabilmente dovresti anche aggiungere una regola .PHONY
in modo da contrassegnare quelle regole sopra come sintetiche, in modo che una deviazione rule1
(ecc.) Nella directory non causi confusione.
I file di trucco non sono procedurali; le "regole" non sono come le funzioni. Detto questo, è possibile specificare che una regola è un prerequisito di un altro:
rule1:
@echo "Rule 1"
rule2: rule1
@echo "Rule 2"
Se lo fai make rule2
, si dovrebbe vedere:
Rule 1
Rule 2
Ci sono due funzioni avanzate in GNU Make che può fare questo , anche se dovrebbe essere usato solo in circostanze attenuanti. Questo SO è il più votato in google.
I prerequisiti della regola sono più consigliati, ma a volte è necessario un post-requisito.
In sostanza, Eval consente di costruire obiettivi al volo, e la chiamata di funzione permette come "definisce" da creare.
Basta aggiungere una nuova regola con l'ordinamento che vuoi ..
rule1:
echo "bye"
rule2:
date
rule3:
@echo "hello"
rule4: rule3 rule1
Imho questa è una soluzione molto più bella rispetto alle altre risposte. –
Semplice - Mi piace. –
Ciò non imporrà l'ordine. Assicurerà semplicemente che la regola 1 e la regola 3 siano fatte prima della regola 4, nessuna garanzia sull'ordinazione – CristianDonosoC
Frustrante, però, non si può ottenere "Regola 2 \ nRule 1" fuori di esso –
@Tomalak: dipende dalla vostra definizione di "frustrante"! Una volta che l'OP accetta che le regole non sono funzioni procedurali, non c'è molto di cui essere frustrati. –
Non risponde alla domanda. Dovrebbe produrre la Regola 2 e quindi la Regola 1. Questo è ciò che l'autore vuole ottenere. – nosbor