IT Narzędzie do budowania

CMake

Znany też jako:cross-platform build systemgenerator systemu budowania

Definicja #

CMake to narzędzie do zarządzania procesem budowania projektów C/C++ (i innych języków) w sposób niezależny od platformy i kompilatora. Nie kompiluje kodu bezpośrednio — generuje pliki wejściowe dla wybranego systemu budowania: Makefile (Linux/macOS), Ninja, pliki projektów Visual Studio (Windows) lub Xcode (macOS).

Konfiguracja projektu odbywa się w plikach CMakeLists.txt przy użyciu języka CMake. Nowoczesne CMake (od wersji 3.x) opiera się na koncepcji targetów i właściwości (target-based approach) — zamiast globalnych zmiennych, właściwości jak include directories czy compile flags są przypisane do konkretnych targetów.

Kluczowe funkcje: znajdowanie bibliotek (find_package), zarządzanie zależnościami (FetchContent, CPM.cmake), obsługa testów (CTest), tworzenie pakietów (CPack), generowanie eksportu konfiguracji dla innych projektów (install + export).

Zastosowania #

  • Budowanie projektów C/C++ na wielu platformach z jedną konfiguracją CMakeLists.txt
  • Embedded i cross-compilation — generowanie plików dla toolchainów ARM, AVR, RISC-V
  • Integracja z IDE — CLion, Visual Studio Code (CMake Tools extension), Visual Studio
  • Zarządzanie zależnościami bibliotek (OpenCV, Boost, Qt, GoogleTest) przez find_package
  • Automatyzacja testów przez CTest i integracja z CI/CD (GitHub Actions, Jenkins)

Ścieżka nauki #

Naukę CMake zacznij od oficjalnej dokumentacji (cmake.org) i tutoriala CMake Tutorial. Polecany zasób to książka Professional CMake Craiga Scotta — najbardziej kompleksowe źródło wiedzy o nowoczesnym CMake.

Kluczowe zagadnienia: tworzenie podstawowego CMakeLists.txt, definiowanie targetów (add_executable, add_library), łączenie bibliotek (target_link_libraries), znajdowanie pakietów (find_package), system budowania Ninja jako szybsza alternatywa dla Make. Warto też opanować FetchContent do zarządzania zależnościami. Praktyczne ćwiczenie: zbuduj projekt z kilkoma bibliotekami (np. fmt, spdlog, GoogleTest) używając tylko CMake.

FAQ #

Czym różni się CMake od Make?
Make to system budowania wykonujący instrukcje z Makefile. CMake to generator — tworzy Makefile (lub pliki dla innych systemów budowania) na podstawie CMakeLists.txt. CMake obsługuje wiele platform i IDE, Make jest specyficzny dla Unixa. W nowoczesnych projektach CMake generuje pliki dla Ninja (szybszy niż Make).
Co to jest nowoczesne CMake (Modern CMake)?
Modern CMake (wersja 3.x+) to podejście oparte na targetach — każda biblioteka i executable jest targetem z własnymi właściwościami. Zamiast globalnego include_directories() używa się target_include_directories(). To eliminuje problemy z propagacją ustawień i ułatwia tworzenie wielomodułowych projektów.
Jak CMake obsługuje zależności zewnętrzne?
CMake oferuje kilka podejść: find_package() do znajdowania zainstalowanych bibliotek, FetchContent do pobierania źródeł podczas konfiguracji, ExternalProject_Add do budowania zależności jako osobnych projektów. Popularne nakładki to CPM.cmake i vcpkg (menedżer pakietów dla C++).
Czy CMake nadaje się do embedded?
Tak — CMake jest szeroko używany w embedded dzięki obsłudze toolchain files (pliki definiujące cross-compiler). Frameworki jak Zephyr RTOS, ESP-IDF i ARM Mbed używają CMake. Można generować pliki dla OpenOCD i debuggerów JTAG/SWD.
Ostatnia aktualizacja:

Powiązane hasła

Technologie i biblioteki, które najczęściej pojawiają się razem z CMake w ogłoszeniach.

Cały słownik IT

Przeglądaj słownik IT alfabetycznie

Wybierz literę, aby zobaczyć wszystkie hasła zaczynające się od niej.