2011-12-27 10 views

Respuesta

55

Cualquiera de las dependencias de uso o la toma recursiva para conectarse desde una regla a otra.

Dependencias se llevaría a cabo como esto (aunque el orden será diferente):

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

make recursivo se haría así (aunque sí implica un subproceso):

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

Ni es perfecto; de hecho, con make recursivo puede entrar en problemas significativos si construye un bucle. Probablemente también deba agregar una regla .PHONY para marcar las reglas anteriores como sintéticas, de modo que un rule1 extraviado (etc.) en el directorio no cause confusión.

16

Los archivos Makefiles no son de procedimiento; "reglas" no son como funciones. Dicho esto, se puede especificar que una regla es un requisito previo de la otra:

rule1: 
    @echo "Rule 1" 

rule2: rule1 
    @echo "Rule 2" 

Si lo hace make rule2, debería ver:

Rule 1 
Rule 2 
+2

frustrante, sin embargo, no se puede conseguir "Regla 2 \ nRule 1" fuera de él –

+2

@Tomalak: depende de su definición de "frustrante"! Una vez que el OP acepta que las reglas no son funciones de procedimiento, entonces no hay mucho de lo que deba sentirse frustrado. –

+0

No responde la pregunta. Debería generar la Regla 2 y luego la Regla 1. Esto es lo que el autor desea lograr. – nosbor

2

Hay dos funciones avanzadas de GNU make que puede hacer esto , aunque solo debe usarse en circunstancias atenuantes. Este SO está mejor calificado en google.

Los requisitos previos de la regla son más recomendados, pero a veces se necesita un requisito.

GNU Make Call function

GNU Make Eval function

Esencialmente, Eval le permite crear objetivos sobre la marcha, y la llamada permite función como "define" que se creará.

7

Sólo añadir una nueva regla con el orden que desee ..

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

rule4: rule3 rule1 
+0

Imho esta es una solución mucho mejor que las otras respuestas. –

+0

Simple - Me gusta. –

+0

Esto no impondrá el orden. Simplemente asegurará que rule1 y rule3 se realicen antes de la regla4, no hay garantía de que se ordenen – CristianDonosoC