2012-01-25 8 views
8

¿Hay alguna manera de que solo pueda ejecutar la dependencia falsa de un archivo si este archivo no existe?Makefile ejecuta phonytargets de un archivo solo si el archivo no existe

Si el archivo no tiene ninguna dependencia falsa, funciona y solo ejecuta el contenido de esta regla. Pero si agrego un destino falso como dependencia, sigue ejecutando la regla de dependencia y la regla de generar el archivo existente.

he simplificado mi Makefile para que pueda ver mi problema:


.PHONY: phonytarget all clean 

all: $(CURDIR)/a.a 
    @echo done 

$(CURDIR)/a.a: phonytarget 
    @touch [email protected] 

phonytarget: 
    @echo what the heck is wrong with you 

Respuesta

7

Uso order-only prerequisites:

Ocasionalmente, sin embargo, se tiene una situación en la que desea imponer un orden específico de las reglas para ser invocado sin forzar que el objetivo se actualice si se ejecuta una de esas reglas. En ese caso, quiere definir prerrequisitos de solo pedido. Los requisitos previos de solo pedido pueden especificarse colocando un símbolo de tubería (|) en la lista de requisitos previos: cualquier requisito previo a la izquierda del símbolo de tubería es normal; cualquier prerrequisito a la derecha es solo de orden:

targets : normal-prerequisites | order-only-prerequisites 

La sección de requisitos previos normales puede estar vacía, por supuesto. Además, puede declarar varias líneas de requisitos previos para el mismo destino: se anexan de forma adecuada (los requisitos previos normales se anexan a la lista de requisitos previos normales, los requisitos previos de solo pedido se anexan a la lista de requisitos previos de solo pedido).

.PHONY: phonytarget all clean 

all: $(CURDIR)/a.a 
    @echo done 

$(CURDIR)/a.a: | phonytarget 
    @touch [email protected] 

phonytarget: 
    @echo what the hack is wrong with you 
Cuestiones relacionadas