Что делает .PHONY в Makefile?
10 февраля 2023 г.Что на самом деле делает .PHONY?
.PHONY используется, чтобы пометить цель как фальшивую. Это означает цель, которая не принимает во внимание для выполнения любой файл, имя которого совпадает с его именем.
Допустим, у нас есть цель с именем clear-cache
, которая удаляет кеш приложения
clear-cache:
rm -rf cache/*
В результате получается следующая команда:
Команда cli для удаления кэша в большинстве случаев будет работать нормально, но давайте проверим, что произойдет, если мы добавим файл с тем же именем, что и у цели, на том же уровне, что и Makefile
Теперь при повторном запуске make clear-cache получаем:
Makefile в основном говорит, что у него уже есть целевой файл и его не нужно выполнять.
Это поведение по умолчанию не соответствует нашим ожиданиям в данном случае, и мы хотим переопределить его. В этом случае на помощь приходит директива .PHONY.
Давайте обновим наш пример, чтобы использовать его:
.PHONY: clear-cache
clear-cache:
rm -rf cache/*
После пометки цели как фальшивой команда ведет себя так, как ожидалось
Совет для профессионалов: еще один способ пометить цели как фальшивые — разместить их все в списке, а не над каждой из них, например:
clear-cache:
rm -rf cache/*
clear-build:
rm -rf build/*
.PHONY: clear-cache clear-build
Заключение
Чтобы переопределить поведение по умолчанию в Makefile и использовать некоторые цели, такие как средства выполнения команд, вы можете использовать .PHONY.
Ссылки:
Также опубликовано здесь
Оригинал