CMake
![]() Logo programu | |||
![]() | |||
Pierwsze wydanie | 2000 | ||
---|---|---|---|
Aktualna wersja stabilna | 3.30.2 (2 sierpnia 2024) [±] | ||
Język programowania | C, C++ | ||
Platforma sprzętowa | Wieloplatformowy | ||
System operacyjny | Wieloplatformowy | ||
Rodzaj | Narzędzia wspomagające budowę aplikacji | ||
Licencja | Licencja BSD | ||
| |||
Strona internetowa |
CMake – wieloplatformowe narzędzie do automatycznego zarządzania procesem kompilacji programu. Jego główna cecha to niezależność od używanego kompilatora oraz platformy sprzętowej. CMake nie kompiluje programu samodzielnie, lecz tworzy pliki z regułami kompilacji dla konkretnego środowiska; przykładowo w systemie GNU/Linux będą to pliki Makefile
, natomiast pod Windowsem – pliki projektu dla Microsoft Visual Studio.
Rozwój projektu jest sponsorowany przez United States National Library of Medicine. Nazwa „CMake” to skrót od ang. Cross-platform Make.
Historia
W 1999 roku amerykańska biblioteka medyczna National Library of Medicine zdobyła kontrakt na zaprojektowanie i stworzenie otwartej biblioteki do segmentacji i rejestracji obrazu, nazwanej później Insight Segmentation and Registration Toolkit. Projekt miał pracować na różnych platformach sprzętowych i środowiskach, lecz okazało się, że nie istnieje uniwersalny system budowania i kompilacji, który działałby na każdej z nich, co zmuszałoby twórców do utrzymywania kilku niezależnych skryptów dostosowanych do konkretnej platformy.
Bill Hoffman z Kitware, główny twórca CMake, inspirował się częściowo wcześniejszym projektem pcmaker autorstwa Ken Martina, dodając jednak sporo własnych pomysłów oraz idei zaczerpniętych z Autotools. Pierwsza implementacja powstała w połowie roku 2000, natomiast od następnego roku projekt przeżywał gwałtowny rozwój. Kolejne funkcjonalności były opracowywane przez programistów, którzy adaptowali CMake na potrzeby swoich własnych projektów i rozwiązywali napotykane tam problemy.
Możliwości
- niezależność od platformy sprzętowej, systemu operacyjnego i kompilatora,
- obsługa złożonych struktur katalogowych,
- kompilacja skrośna,
- możliwość kompilowania w oddzielnym katalogu (out-of-source build, pliki wynikowe nie mieszają się ze źródłami),
- wsparcie dla testów jednostkowych,
- mechanizm wykrywania zależności i bibliotek zewnętrznych.
Elementy składowe
Język skryptowy
Głównym elementem składowym CMake jest prosty język skryptowy, w którym tworzone są pliki CMakeLists.txt
umieszczane w katalogach ze źródłami projektu. Służy on do definiowania reguł budowania opisujących m.in. jakie pliki wynikowe powinny powstać w wyniku kompilacji, jak połączyć je z zewnętrznymi bibliotekami oraz jak je zainstalować. Przykładowy plik CMakeLists.txt
przedstawiony jest poniżej:
cmake_minimum_required (VERSION 2.6) project(przyklad) # Przykladowa opcja kompilacji option (USE_SOMETHING "Use some extra functionality" ON) # Wyeksportuj ustawienia do pliku config.h # uzywajac config.h.in jako szablonu configure_file ( "${PROJECT_SOURCE_DIR}/config.h.in" "${PROJECT_BINARY_DIR}/config.h" ) # Ustaw katalog z plikami naglowkowymi i zbuduj projekt. include_directories("${PROJECT_BINARY_DIR}") add_executable(przyklad przyklad.c)
Duży nacisk kładziony jest na wsteczną kompatybilność tworzonych skryptów. Jeśli w nowej wersji CMake pojawia się zmiana, która zmienia zachowanie jednego z istniejących już elementów (np. w wyniku dodania nowej funkcjonalności lub naprawy znalezionego błędu), system umożliwia programiście wybór między użyciem starego i nowego zachowania.
Na podstawie plików CMakeLists.txt
CMake jest w stanie wygenerować np. pliki Makefile
, przy pomocy których można dokonać właściwej kompilacji programu zgodnie z wybranymi ustawieniami. Przykładowa sekwencja komend dla systemu GNU/Linux prowadząca do utworzenia skompilowanego programu to:
$ cmake ./ -DUSE_SOMETHING=ON $ make $ make install
Środowisko testów
ctest
to program narzędziowy wchodzący w skład CMake służący do uruchamiania testów jednostkowych. Testami są pliki wykonywalne powstałe podczas kompilacji i oznaczone jako testowe komendą add_test()
. Po zbudowaniu aplikacji polecenie ctest
uruchamia wszystkie dostępne testy lub tylko wybraną ich część, a następnie przedstawia raport końcowy zawierający informacje o wynikach każdego z nich oraz czasie wykonania. Uzyskany raport może być następnie wysłany do cdash, aplikacji WWW służącej do gromadzenia i analizy wyników testów.
Pakowanie aplikacji
cpack
to narzędzie wchodzące w skład CMake od wersji 2.4.2, które umożliwia wygenerowanie pakietów instalacyjnych dla konkretnych platform przy pomocy tzw. generatorów. Dostępnych jest obecnie kilkanaście generatorów, dzięki którym można utworzyć np. pakiety RPM czy DEB dla systemu Linux zawierające skompilowaną aplikację.
Linki zewnętrzne
- Strona domowa projektu