Szukając jak ubrać w słowa co to makefile znalazłem głównej mierze definicje zbliżone do poniższej
Makefile to prosty sposób organizowania kompilacji kodu.
Według mnie make to narzędzie które najczęściej grupuję oraz upraszcza polecenia terminala. Najpewniej Make tak samo jak sam PHP z czasem przybrał inną formę od jego pierwotnego założenia.
W świecie PHP’owym najczęściej spotkamy go do budowania obrazów Dockera, uruchamiania środowiska itd.
Podstawowe przykłady
Zaczniemy od prostego polecania który wyświetli nam „Hello World”
.PHONY: hello
hello:
echo "Hello world"
Aby sprawdzić wynik wystarczy że w CLI wywołasz make hello.
Skomplikujmy makefile
Pora teraz przygotować kilka różnych poleceń.
.PHONY: mutation
mutation:
symfony php vendor/bin/infection
.PHONY: unit
unit:
symfony php vendor/bin/phpunit
PS jeśli nie wiesz co to infection zapraszam Cię do mojego wpisu na temat testów mutacyjnych [TUTAJ].
Mając już te polecenia możemy je pogrupować tak jak np. poniżej.
.PHONY: mutation
mutation:
symfony php vendor/bin/infection
.PHONY: unit
unit:
symfony php vendor/bin/phpunit
.PHONY: ci
ci: unit mutation
Finalnie dzięki takiemu podziałowi masz dużą elastyczność uruchamiania i/lub modyfikowania.
A argumenty?
W kwestii budowy samego pliku do omówienia pozostały nam jedynie argumenty. Definicja ich jak cała budowa pliku jest banalnie prosta.
LNG="PHP"
.PHONY: hello
hello:
echo "Hello ${NAME} and I'm like ${LNG}"
Możesz sprawdzić wynik działania pliku za pomocą polecenia NAME=Łukasz make hello. Jedną z ciekawostek/zasad działania jest to że jeżeli argument nie ma wartości podstawowej możesz przekazać wartość tak jak wcześniej ale również w następujący sposób make NAME=Łukasz hello. W sytuacji gdy argument posiada już jakąś wartość podstawową tak jak argument LNG możesz ją przekazać tylko w taki sposób NAME=Łukasz make LNG=RUST hello tj. po make (może też być przekazany po nazwie funkcji hello).
.PHONY czyli mały smaczek
Jest również jeden smaczek o którym warto wspomnieć. We wszystkich przykładach widziałeś następująca składnie funkcji.
.PHONY: run
run:
docker-compose up -d
symfony server:start -d
yarn watch
Ale nigdzie nie wytłumaczyłem czym wgl jest to całe .PHONY.
Domyślnie Makefile służą do budowania plików z innych plików. Gdy w obrębie katalogu z którego wywołujesz Make znajdzie się plik odzwierciedlający nazwę twojej funkcji rzuci błędem. Dzięki użyciu .PHONY Make nie weryfikuję czy plik istnieję tylko wykonuję zdefiniowane polecenia.
run_without:
echo "Hello without PHONY"
.PHONY: run_with
run_with:
echo "Hello with PHONY"
Spełniając powyższe wymagania oraz wywołując Make otrzymasz taki wynik

Przy okazji zachęcam Cię do przeczytania kolejnej optymalizacji twojego czasu [TUTAJ]. 🙂
Źródła: