makefile                
            .PHONY target
        
        
            
    Поиск…
Использование .PHONY для целей без файлов
 Используйте .PHONY чтобы указать цели, которые не являются файлами, например, clean или mrproper . 
Хороший пример
.PHONY: clean
clean:
    rm *.o temp
Плохой пример
clean:
    rm *.o temp
 В хорошем примере make знает, что clean не является файлом, поэтому он не будет искать, если он есть или не обновляется и будет выполнять рецепт. 
 В плохом примере make будет искать файл с именем clean . Если он не существует или не обновляется, он будет выполнять рецепт, но если он существует и обновлен, рецепт не будет выполнен. 
Использование .PHONY для рекурсивных вызовов команды make
Рекурсивное использование make означает использование make в качестве команды в make-файле. Этот метод полезен, когда большой проект содержит подкаталоги, каждый из которых имеет свои файлы make-файлов. Следующий пример поможет понять преимущество использования .PHONY с рекурсивным make.
/main
     |_ Makefile
     |_ /foo
            |_ Makefile
            |_ ... // other files
     |_ /bar
            |_ Makefile
            |_ ... // other files
     |_ /koo
            |_ Makefile
            |_ ... // other files
Чтобы запустить make-файл подкаталога из make-файла main, make-файл main будет иметь петлю, как показано ниже (есть другие способы, которыми это может быть достигнуто, но это выходит за рамки текущего раздела)
SUBDIRS = foo bar koo
subdirs:
        for dir in $(SUBDIRS); do \
          $(MAKE) -C $$dir; \
        done
Однако с этим методом существуют подводные камни.
- Любая ошибка, обнаруженная в под-маке, игнорируется этим правилом, поэтому она будет продолжать строить остальные каталоги, даже если один из них не выполняется.
- Способность Make выполнять параллельное выполнение нескольких целей сборки не используется, поскольку используется только одно правило.
Объявляя подкаталоги как .PHONY-мишени (вы должны сделать это, так как подкаталог, очевидно, всегда существует, иначе он не будет построен), эти проблемы могут быть преодолены.
SUBDIRS = foo bar koo
.PHONY: subdirs $(SUBDIRS)
subdirs: $(SUBDIRS)
$(SUBDIRS):
        $(MAKE) -C $@