makefile                
            Cel PHONY
        
        
            
    Szukaj…
Używanie .PHONY dla celów niebędących plikami
 Użyj .PHONY aby określić cele, które nie są plikami, np. clean lub mrproper . 
Dobry przykład
.PHONY: clean
clean:
    rm *.o temp
Zły przykład
clean:
    rm *.o temp
 W dobrym przykładzie make wie, że clean nie jest plikiem, dlatego nie będzie wyszukiwał, czy jest aktualny, i wykona przepis. 
 W złym przykładzie make będzie szukał pliku o nazwie clean . Jeśli nie istnieje lub jest nieaktualny, wykona przepis, ale jeśli istnieje i jest aktualny, przepis nie zostanie wykonany. 
Używanie .PHONY do rekurencyjnych wywołań polecenia „make”
Rekurencyjne użycie make oznacza użycie make jako polecenia w pliku makefile. Ta technika jest przydatna, gdy duży projekt zawiera podkatalogi, z których każdy ma swoje odpowiednie pliki makefile. Poniższy przykład pomoże zrozumieć zaletę używania .PHONY z marką rekurencyjną.
/main
     |_ Makefile
     |_ /foo
            |_ Makefile
            |_ ... // other files
     |_ /bar
            |_ Makefile
            |_ ... // other files
     |_ /koo
            |_ Makefile
            |_ ... // other files
Aby uruchomić plik makefile podkatalogu z pliku makefile main, plik makefile main miałby pętlę, jak pokazano poniżej (istnieją inne sposoby, w jakie można to osiągnąć, ale to nie wchodzi w zakres bieżącego tematu)
SUBDIRS = foo bar koo
subdirs:
        for dir in $(SUBDIRS); do \
          $(MAKE) -C $$dir; \
        done
Jednak przy tej metodzie występują pułapki.
- Każdy błąd wykryty w podwykonawcy jest ignorowany przez tę regułę, więc będzie kontynuował budowanie reszty katalogów, nawet jeśli jeden zawiedzie.
- Marka nie może wykonywać równoległego wykonywania wielu celów kompilacji, ponieważ używana jest tylko jedna reguła.
Deklarując podkatalogi jako obiekty docelowe .PHONY (musisz to zrobić, ponieważ podkatalog oczywiście zawsze istnieje; w przeciwnym razie nie zostanie zbudowany) problemy te można rozwiązać.
SUBDIRS = foo bar koo
.PHONY: subdirs $(SUBDIRS)
subdirs: $(SUBDIRS)
$(SUBDIRS):
        $(MAKE) -C $@