2012-01-25 12 views
8

Esiste un modo per eseguire solo la dipendenza fasulla di un file se questo file non esiste?Makefile esegue fonytarget di un file solo se il file non esiste

Se il file non ha dipendenze false funziona e esegue solo il contenuto di questa regola. Ma se aggiungo un obiettivo fasullo come dipendenza, continua ad eseguire la regola di dipendenza e la regola di generare il file esistente.

Ho semplificato la mia Makefile in modo da poter vedere il mio 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 

risposta

7

Uso order-only prerequisites:

Di tanto in tanto, però, si ha una situazione in cui si vuole imporre un ordinamento specifico sulle regole da invocare senza forzare l'aggiornamento della destinazione se viene eseguita una di queste regole. In tal caso, si desidera definire i prerequisiti di solo ordine. I prerequisiti di solo ordine possono essere specificati inserendo un simbolo pipe (|) nell'elenco dei prerequisiti: qualsiasi prerequisito alla sinistra del simbolo pipe è normale; eventuali prerequisiti a destra sono solo ordini:

targets : normal-prerequisites | order-only-prerequisites 

La sezione dei prerequisiti normali può ovviamente essere vuota. Inoltre, è possibile dichiarare più righe di prerequisiti per la stessa destinazione: vengono aggiunte in modo appropriato (i prerequisiti normali vengono aggiunti all'elenco dei prerequisiti normali, i prerequisiti di solo ordine vengono aggiunti all'elenco dei prerequisiti di solo ordine).

.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 
Problemi correlati