2012-01-25 20 views
8

Czy jest jakiś sposób, abym mógł wykonać fałszywą zależność pliku , jeśli ten plik nie istnieje?Makefile wykonuje phonytargets pliku tylko wtedy, gdy plik nie istnieje

Jeśli plik nie ma fałszywej zależności, działa i wykonuje tylko treść tej reguły. Ale jeśli dodaję fałszywy cel jako zależność, to nadal będzie wykonywał regułę zależności i regułę generowania istniejącego pliku.

I uproszczone mojego Makefile, dzięki czemu można zobaczyć mój problem:


.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 

Odpowiedz

7

Używaj order-only prerequisites:

Czasami jednak masz sytuację, w której chcesz narzucać konkretnego uporządkowania w sprawie zasad do wywołania bez wymuszania aktualizacji celu, jeśli zostanie wykonana jedna z tych reguł. W takim przypadku chcesz zdefiniować wymagania wstępne dotyczące tylko zamówień. Wymagania wstępne dotyczące tylko zamówienia można określić, umieszczając symbol rury (|) na liście wymagań wstępnych: wszelkie wymagania wstępne po lewej stronie symbolu rury są normalne; wszelkie warunki wstępne po prawej stronie to tylko zamówienie:

targets : normal-prerequisites | order-only-prerequisites 

Sekcja normalnych wymagań wstępnych może oczywiście być pusta. Ponadto możesz zadeklarować wiele wierszy wymagań wstępnych dla tego samego obiektu docelowego: są one odpowiednio dołączane (normalne wymagania wstępne są dołączane do listy normalnych wymagań wstępnych, a wymagania wstępne dotyczące tylko zamówień są dołączane do listy wymagań wstępnych związanych tylko z zamówieniem).

.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 
Powiązane problemy