entre - makefile linux c
marca: regla de llamada de regla (4)
En un archivo MAKE, ¿puedo invocar una regla de otra regla?
Similar a:
rule1:
echo "bye"
rule2:
date
rule3:
@echo "hello"
rule1
Hay dos funciones avanzadas en GNU Make que pueden 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 recomendables, pero a veces necesita un requisito posterior.
Básicamente, Eval le permite construir objetivos sobre la marcha, y Call permite que se cree una función como "define".
Los archivos Makefiles no son de procedimiento; "reglas" no son como funciones. Dicho esto, puede especificar que una regla es un requisito previo de otra:
rule1:
@echo "Rule 1"
rule2: rule1
@echo "Rule 2"
Si haces make rule2
, deberías ver:
Rule 1
Rule 2
Simplemente agregue una nueva regla con el orden que desee.
rule1:
echo "bye"
rule2:
date
rule3:
@echo "hello"
rule4: rule3 rule1
Use dependencias o creación recursiva para conectarse de una regla a otra.
Las dependencias se harían así (aunque el orden será diferente):
rule1:
echo "bye"
rule2:
date
rule3: rule1
@echo "hello"
La marca recursiva se haría así (aunque implica un subproceso):
rule1:
echo "bye"
rule2:
date
rule3:
@echo "hello"
$(MAKE) rule1
Ninguno de los dos 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 esas reglas como sintéticas, de modo que una rule1
(etc.) perdida en el directorio no cause confusión.