CMake

Z Wikipedii, wolnej encyklopedii
Skocz do: nawigacja, szukaj
CMake
Narzędzia wspomagające budowę aplikacji
Cmake.svg
Logo programu
System operacyjny Wieloplatformowy
Aktualna wersja stabilna 2.8.12/2 - 8 listopada 2013
Licencja Licencja BSD
http://www.cmake.org/

CMake to 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 Linux będą to pliki Makefile, zaś 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 „Cross-platform Make”.

Historia[edytuj | edytuj kod]

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, zaś 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[edytuj | edytuj kod]

  • 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 folderze (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[edytuj | edytuj kod]

Język skryptowy[edytuj | edytuj kod]

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 Linux prowadząca do utworzenia skompilowanego programu to:

$ cmake ./ -DUSE_SOMETHING=ON
$ make
$ make install

Środowisko testów[edytuj | edytuj kod]

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[edytuj | edytuj kod]

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[edytuj | edytuj kod]