En un archivo MAKE, ¿puedo invocar una regla de otra regla?marca: regla de llamada de regla
similares a:
rule1:
echo "bye"
rule2:
date
rule3:
@echo "hello"
rule1
En un archivo MAKE, ¿puedo invocar una regla de otra regla?marca: regla de llamada de regla
similares a:
rule1:
echo "bye"
rule2:
date
rule3:
@echo "hello"
rule1
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.
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
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.
Esencialmente, Eval le permite crear objetivos sobre la marcha, y la llamada permite función como "define" que se creará.
Sólo añadir una nueva regla con el orden que desee ..
rule1:
echo "bye"
rule2:
date
rule3:
@echo "hello"
rule4: rule3 rule1
Imho esta es una solución mucho mejor que las otras respuestas. –
Simple - Me gusta. –
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
frustrante, sin embargo, no se puede conseguir "Regla 2 \ nRule 1" fuera de él –
@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. –
No responde la pregunta. Debería generar la Regla 2 y luego la Regla 1. Esto es lo que el autor desea lograr. – nosbor