wydanie wieloplatformowego otwartego generatora skryptów kompilacji , który pełni rolę alternatywy dla Autotools i jest używany w takich projektach jak KDE, LLVM/Clang, MySQL, MariaDB, ReactOS i Blender. Kod CMake jest napisany w języku C++ i jest udostępniany na licencji BSD.
CMake wyróżnia się tym, że oferuje prosty język skryptowy, możliwości rozszerzenia funkcjonalności poprzez moduły, minimalną liczbę zależności (brak powiązań z M4, Perlem czy Pythonem), wsparcie dla pamięci podręcznej, dostępność narzędzi do kompilacji krzyżowej, generację plików kompilacji dla szerokiej gamy systemów kompilacji i kompilatorów, oraz narzędzi ctest i cpack do definiowania skryptów testowych i pakietów, a także narzędzię cmake-gui do interaktywnej konfiguracji parametrów kompilacji.
Podstawowe :
- Dodano wsparcie dla języków Objective C („OBJC”) i Objective
C++ („OBJCXX”), które można aktywować poprzez polecenia project() i enable_language(), dzięki czemu kod w plikach „.m” i „.mm” będzie kompilowany jako kod w Objective C i Objective C++, a nie jako kod w C++, jak to miało miejsce wcześniej; - Dodano wsparcie dla kompilatora Clang na platformie Solaris;
- Dodano nowe parametry wiersza poleceń: „cmake -E true|false” do wyjścia kodów zwrotnych 0 i 1; „cmake —trace-redirect=” do przekierowania informacji o śledzeniu do pliku, zamiast
„stderr”; polecenie „cmake —loglevel” zmieniono na „—log-level” celem dostosowania go do nazewnictwa innych poleceń; - Dodano polecenie „target_precompile_headers()” do wymienienia listy plików nagłówkowych używanych przy prekompilacji (skraca czas kompilacji);
- Dodano właściwość „UNITY_BUILD”, która aktywuje tryb przetwarzania plików źródłowych w paczkach w generatorach w celu przyspieszenia kompilacji;
- Dodano polecenia „find_file()”, „find_library()”, „find_path()”,
„find_package()” i „find_program()” do wyszukiwania plików, bibliotek, ścieżek, pakietów i plików wykonawczych zgodnie z zmiennymi definiującymi ścieżki wyszukiwania różnych kategorii plików.
Do zarządzania podstawowymi ścieżkami wyszukiwania używa się zmiennych „CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH”, „CMAKE_FIND_USE_CMAKE_PATH”, „CMAKE_FIND_USE_CMAKE_SYSTEM_PATH”, „CMAKE_FIND_USE_PACKAGE_ROOT_PATH”, „CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH” oraz „CMAKE_FIND_USE_PACKAGE_REGISTRY”; - Do zespołu „file()” dodano tryb „file(GET_RUNTIME_DEPENDENCIES)”, umożliwiający rekurencyjne wydobycie listy bibliotek używanych podczas dynamicznego powiązania pliku wykonywalnego lub biblioteki. Tryb zastępuje polecenie GetPrerequisites(), które teraz zostało oznaczone jako przestarzałe;
- W poleceniu „ctest(1)” wprowadzono możliwość serializacji testów, opierając się na zasobach wymaganych dla każdego testu;
- Została uznana za przestarzałą zmienna „CMAKE_FIND_PACKAGE_NO_PACKAGE_REGISTRY”, której należy używać zamiast „CMAKE_FIND_USE_PACKAGE_REGISTRY”;
- Ulepszona obsługa platformy AIX. Przy użyciu właściwości „ENABLE_EXPORTS”, oprócz pliku wykonywalnego, teraz generowany jest również plik importu dla linkera, zapisywany z rozszerzeniem „.imp”. Wtyczki tworzone za pomocą wywołania „add_library()” z opcją „MODULE” mogą wykorzystywać ten plik podczas linkowania za pomocą polecenia „target_link_libraries()”. Linkowanie w czasie wykonywania w AIX jest domyślnie wyłączone, ponieważ CMake dostarcza teraz wszelkie potrzebne informacje o symbolach do linkowania podczas ładowania. Aby zastosować linkowanie w czasie wykonywania dla dynamicznych bibliotek lub modułów ładowanych, należy jawnie określić opcje „-Wl,-G” na liście flag rozpoczęcia linkera, definiowanej przez zmienne „CMAKE_SHARED_LINKER_FLAGS” i „CMAKE_MODULE_LINKER_FLAGS”.
Źródło: opennet.ru
