Generator Makefile
Zamień listę zadań w formacie nazwa: polecenie w gotowy plik Makefile z tabulatorami i celem help.
-
1Wprowadź dane
Wpisz treść, wklej tekst lub załaduj plik z dysku. -
2Kliknij przycisk
Narzędzie natychmiast przetworzy Twoje dane w przeglądarce. -
3Pobierz wynik
Skopiuj gotowy tekst lub zapisz plik na urządzeniu.
return "Wynik gotowy w 0.1s";
}
Oceń to narzędzie:
Powiązane narzędzia
Inne narzędzia, które mogą Ci się przydaćGenerator Makefile — cele, polecenia i samodokumentujący się help
Generator Makefile zamienia listę zadań w formacie nazwa: polecenie w gotowy plik Makefile: z prawdziwymi tabulatorami w przepisach, deklaracją .PHONY dla wszystkich celów i celem help, który sam wypisuje dostępne komendy. Wpisz nazwę projektu, wklej zadania i skopiuj wynik do katalogu głównego repozytorium.
Co dokładnie generuje to narzędzie
Każdą linię formularza narzędzie dzieli na pierwszym dwukropku: lewa strona to nazwa celu, prawa to polecenie powłoki. Nazwa może zawierać wyłącznie litery, cyfry, podkreślenia i myślniki, więc nie powstanie cel, którego Make nie potrafi wywołać. Puste polecenie zamienia się w echo "nazwa" — plik dalej działa, a widać, że cel czeka na treść. Powtórzone nazwy są scalane do jednego wpisu, bo drugi przepis dla tego samego celu wywołuje ostrzeżenie overriding recipe for target.
Nagłówek pliku to komentarz z nazwą projektu. Dalej .DEFAULT_GOAL := help, czyli samo make pokazuje pomoc, zamiast budować pierwszy napotkany cel. Potem jedna linia .PHONY ze wszystkimi celami, a na końcu cele w kolejności, w jakiej je wpisałeś — każdy z komentarzem ##, z którego cel help składa listę poleceń.
Anatomia pliku Makefile
| Element | Zapis | Rola |
|---|---|---|
| Cel (target) | build: | Nazwa zadania wywoływana przez make build |
| Przepis (recipe) | npm run build | Polecenie celu — od tabulatora, każda linia w osobnej powłoce |
| Wymagania | build: install | Cele wykonywane przed danym celem |
.PHONY | .PHONY: build test | Cele niebędące plikami — Make pomija sprawdzanie daty modyfikacji |
.DEFAULT_GOAL | .DEFAULT_GOAL := help | Cel uruchamiany przez samo make |
| Komentarz opisowy | build: ## buduje paczkę | Tekst po ## zbiera cel help |
Tabulator zamiast spacji — klasyczna pułapka Make
Makefile:7: *** missing separator. Stop. Generator wstawia prawdziwe tabulatory, ale edytor z opcją zamiany tabulatorów na spacje potrafi to zepsuć po wklejeniu.Wyłącz w edytorze konwersję tabulatorów dla plików o nazwie Makefile. Podejrzany plik sprawdzisz komendą cat -A Makefile — poprawna linia przepisu zaczyna się od ^I. Zmienna .RECIPEPREFIX pozwala co prawda zmienić znak wcięcia, ale psuje przenośność, więc lepiej zostać przy tabulatorze.
Znak dolara i zmienne w przepisach
Make rozwija $ zanim linia trafi do powłoki, dlatego zmienne shellowe i pola awk pisze się podwójnie: $$PATH, $$1, $$(date). Pojedyncze $(FOO) to zmienna Make, a $(shell date) wykonuje się na etapie czytania pliku, nie w trakcie działania celu. Cel help z tego generatora używa obu form naraz: $(MAKEFILE_LIST) zostaje po stronie Make, a $$1 i $$2 trafiają do awk jako numery kolumn.
Jak korzystać z generatora
- Wpisz nazwę projektu — trafi do komentarza w pierwszej linii pliku.
- Wypisz zadania, po jednym w linii, w formacie
nazwa: polecenie, na przykładtest: vendor/bin/phpunit. - Kliknij Generuj Makefile i skopiuj wynik przyciskiem obok podglądu.
- Zapisz zawartość jako
Makefile(wielka litera M) w katalogu głównym projektu. - Uruchom
makealbomake help, aby zobaczyć listę celów, a potem wybrany cel:make test.
Makefile spina się z resztą warsztatu: krótkie make deploy wywołasz z pipeline'u przygotowanego w generatorze konfiguracji GitLab CI albo w generatorze pliku Jenkinsfile, a zadanie cykliczne ustawisz przez generator crontab. Przed pierwszym commitem przyda się generator pliku .gitignore, a przy wdrożeniu na serwer Apache generator pliku .htaccess.
Czego to narzędzie nie robi
Jeden cel dostaje dokładnie jedno polecenie. Wieloliniowe przepisy, wymagania między celami, zmienne, warunki ifeq i reguły wzorcowe w stylu %.o: %.c dopisujesz ręcznie w wygenerowanym szkielecie. Generator nie sprawdza też, czy polecenie istnieje w systemie — weryfikuje format linii i nazwę celu.
Najczęściej zadawane pytania
Dlaczego Makefile wymaga tabulatorów?
To decyzja z 1976 roku, którą autor Make nazwał później swoim błędem, ale zgodność wstecz wygrała. Dziś tabulator jest jedynym przenośnym znakiem wcięcia przepisu. Spacje dają błąd missing separator wskazujący numer linii — od niej zacznij szukać.
Czym Makefile różni się od skryptu bash albo npm scripts?
Make zna zależności między celami i plikami: jeśli cel odpowiada plikowi nowszemu niż jego wymagania, pomija pracę. Skrypt bash wykonuje wszystko za każdym razem, a npm scripts działa tylko w projektach z package.json. Makefile jest niezależny od języka, więc jedno make test obsłuży repozytorium z PHP, Pythonem i frontendem naraz.
Do czego właściwie służy .PHONY?
Deklaruje cele, które nie tworzą pliku o swojej nazwie. Bez tego wystarczy katalog build albo plik test w repozytorium, żeby Make uznał cel za wykonany i wypisał make: 'test' is up to date. Generator dopisuje .PHONY dla każdego celu, bo wszystkie są zadaniami, nie plikami wynikowymi.
Jak przekazać argument do celu?
Najprościej zmienną: make deploy ENV=staging, a w przepisie $(ENV). Wartość domyślną ustawisz przez ENV ?= production nad celami. Zmienne z linii poleceń mają pierwszeństwo nad tymi z pliku, więc nie musisz nic komentować przy jednorazowym uruchomieniu.
Czy Makefile działa na Windows?
Tak, po zainstalowaniu make — najczęściej przez Git Bash, MSYS2, Chocolatey albo WSL. Sama składnia jest przenośna, ale polecenia w przepisach już nie: rm -rf czy ukośniki w ścieżkach zachowają się inaczej pod cmd.exe. Jeśli projekt ma działać na obu systemach, uruchamiaj Make w WSL lub trzymaj polecenia w skryptach wywoływanych z celu.