GNU Make
Automatyzacja zadań w projektach programistycznych
GNU Make
to narzędzie automatyzujące procesy budowania oprogramowania dla developerów. Zostało pierwotnie stworzone dla systemów Unix w latach 70, aby ułatwić kompilację kodu źródłowego w językach takich jak C. Makefile
to plik konfiguracyjny, w którym definiuje się zasady, jak narzędzie make
ma wykonywać zautomatyzowane zadania.
Działa na podstawie zależności między plikami. Dla każdego zadania (target
) definiujemy:
- Plik docelowy (target) - co chcemy osiągnąć (np. skompilowany program, przetestowana aplikacja).
- Zależności (dependencies) - co jest wymagane, aby zrealizować zadanie.
- Komendy (commands) - jak wykonać zadanie.
Generalnie korzysta się z niego prosto, a bardzo ułatwia życie.
Jego zalety:
- Automatyzowanie procesów - pozwala zautomatyzować powtarzalne zadania, takie jak uruchamianie testów, kompilacja, instalacja zależności czy budowa projektu.
- Przenośność - działa na różnych systemach operacyjnych (Unix, Linux, macOS, Windows z odpowiednimi narzędziami).
- Czytelność - zamiast opisywać procesy w dokumentacji, wszystkie kroki są zdefiniowane w jednym pliku
Makefile
, co ułatwia nowym programistom zrozumienie projektu. - Uniwersalność - pomimo historycznego związku z
C
iC++
,Makefile
jest obecnie używany w wielu językach programowania, takich jakPython
,Go
czyRust
.
Żeby sprawdzić czy narzędzie jest dostępne, wystarczy uruchomić w konsoli make --version
.
Instalacja na Linux
Na większości dystrybucji GNU Make jest dostępny w standardowych repozytoriach.
sudo apt update
sudo apt install make
Instalacja na Windows
Na Windows GNU Make nie jest instalowane domyślnie, ale można je zainstalować za pomocą różnych narzędzi.
Tutaj przykład dla Chocolatey (które trzeba też najpierw zainstalować):
choco install make
Instalacja na MacOS
W przypadku Homebrew GNU Make może być dostępny jako gmake
, aby odróżnić go od wersji dostarczanej z systemem.
brew install make
Zadania
Nasz program, poza środowiskiem developerskim, nie potrzebuje w środowisku wirtualnym zainstalowanych bibliotek do lintingu czy testowania, dlatego zwykle stosuje się dwie osobne definicje środowiska (np. env.yml
oraz env-dev.yml
).
- Stwórz kopię pliku
env.yml
, zmień jego nazwę naenv-dev.yml
i zamieńdependencies
na to co poniżej:
dependencies:
- pip:
- pre-commit
- pytest
- pytest-asyncio
- pytest-cov
- pytest-mock
- pytest-pretty
- ruff
- mkdocs
- mkdocs-material
- mypy
- Zapoznaj się z plikiem
Makefile
(stwórz go i dodaj komendy na podstawie wzoru z internetu lub przykładu od prowadzącego) - Wykorzystując komendy z pliku
Makefile
, wygeneruj plikiconda-lock
dla obu definicji, a następnie stwórz i aktywuj środowisko wirtualne. - Rozbuduj plik
Makefile
o dodatkową komendęenv
, która połączy działanie 3 już istniejących:conda-lock-install
,setup-pre-commit
isetup-editable
. - Rozbuduj plik
Makefile
o dodatkową komendęrecreate-env
, która połączy działanieremove-env
,lock-file
ienv
. - Sprawdź działanie stworzonych przez siebie komend.