Что на самом деле делает .PHONY?

.PHONY используется, чтобы пометить цель как фальшивую. Это означает цель, которая не принимает во внимание для выполнения любой файл, имя которого совпадает с его именем.

Допустим, у нас есть цель с именем clear-cache, которая удаляет кеш приложения

.
clear-cache:
    rm -rf cache/*

В результате получается следующая команда:

command line result 1

Команда cli для удаления кэша в большинстве случаев будет работать нормально, но давайте проверим, что произойдет, если мы добавим файл с тем же именем, что и у цели, на том же уровне, что и Makefile

command line result 2

Теперь при повторном запуске make clear-cache получаем:

command line result 3

Makefile в основном говорит, что у него уже есть целевой файл и его не нужно выполнять.

Это поведение по умолчанию не соответствует нашим ожиданиям в данном случае, и мы хотим переопределить его. В этом случае на помощь приходит директива .PHONY.

Давайте обновим наш пример, чтобы использовать его:

.PHONY: clear-cache
clear-cache:
    rm -rf cache/*

После пометки цели как фальшивой команда ведет себя так, как ожидалось

command line result 4

Совет для профессионалов: еще один способ пометить цели как фальшивые — разместить их все в списке, а не над каждой из них, например:

clear-cache:
    rm -rf cache/*
clear-build:
    rm -rf build/*

.PHONY: clear-cache clear-build

Заключение

Чтобы переопределить поведение по умолчанию в Makefile и использовать некоторые цели, такие как средства выполнения команд, вы можете использовать .PHONY.

Ссылки:


Также опубликовано здесь