release van de cross-platform open source build-scripts generator , dat dient als alternatief voor Autotools en wordt gebruikt in projecten zoals KDE, LLVM/Clang, MySQL, MariaDB, ReactOS en Blender. De code van CMake is geschreven in C++ en wordt verspreid onder de BSD-licentie.
CMake valt op door het bieden van een eenvoudige script-taal, extensiemogelijkheden via modules, een minimaal aantal afhankelijkheden (geen binding aan M4, Perl of Python), ondersteuning voor cachen, tools voor cross-compilatie, ondersteuning voor het genereren van build-bestanden voor een breed scala aan build-systemen en compilers, en de aanwezigheid van de tools ctest en cpack voor het definiëren van test- en pakket build-scripts, evenals de cmake-gui-tool voor interactieve configuratie van build-instellingen.
Belangrijkste :
- Ondersteuning voor de programmeertalen Objective C (‘OBJC’) en Objective C++ (‘OBJCXX’) is toegevoegd, die geactiveerd kunnen worden via de commando's project() en enable_language(), waarna code in de bestanden ‘.m’ en ‘.mm’ wordt gecompileerd als Objective C en Objective C++ code, in plaats van als C++ code zoals voorheen;
Ondersteuning voor de Clang-compiler op het Solaris-platform is toegevoegd; - Nieuwe commandoregelparameters zijn toegevoegd: ‘cmake -E true|false’ voor het uitgeven van retourcodes 0 en 1; ‘cmake —trace-redirect=’ voor het omleiden van trace-informatie naar een bestand in plaats van
- ‘stderr’; het commando ‘cmake —loglevel’ is hernoemd naar ‘—log-level’ voor eenheid in benaming van andere commando's;
De command ‘target_precompile_headers()’ is toegevoegd om de lijst met headerbestanden te noemen die worden gebruikt bij de voorcompilatie (verlaagt de bouwtijd); - De eigenschap ‘UNITY_BUILD’ is toegevoegd die de batchverwerkingsmodus van bronbestanden in generators activeert om de bouw te versnellen;
- De commando's ‘find_file()’, ‘find_library()’, ‘find_path()’,
- ‘find_package()’ en ‘find_program()’ zijn toegevoegd om bestanden, bibliotheken, paden, pakketten en uitvoerbare bestanden te vinden volgens de variabelen die de zoekpaden van verschillende categorieën bestanden definiëren.
Om de basis paden voor zoekopdrachten te beheren, worden de variabelen ‘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’ en ‘CMAKE_FIND_USE_PACKAGE_REGISTRY’ gebruikt;
Voor het beheren van de basis paden voor zoeken worden de variabelen "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" en "CMAKE_FIND_USE_PACKAGE_REGISTRY" gebruikt; - De commando "file()" heeft de modus "file(GET_RUNTIME_DEPENDENCIES)" gekregen, waarmee de lijst van bibliotheken die betrokken zijn bij de dynamische binding van een uitvoerbaar bestand of bibliotheek recursief kan worden geëxtraheerd. Deze modus vervangt het commando GetPrerequisites(), dat nu als verouderd wordt beschouwd;
- In het commando "ctest(1)" is de mogelijkheid geïmplementeerd om tests te serialiseren op basis van de bronnen die voor elke test vereist zijn;
- De variabele "CMAKE_FIND_PACKAGE_NO_PACKAGE_REGISTRY" is als verouderd verklaard, en in plaats daarvan zou "CMAKE_FIND_USE_PACKAGE_REGISTRY" moeten worden gebruikt;
- De ondersteuning voor het AIX-platform is verbeterd. Bij het gebruik van de eigenschap "ENABLE_EXPORTS" wordt nu naast het uitvoerbare bestand ook een importbestand voor de link-editor aangemaakt, opgeslagen met de extensie ".imp". In de plug-ins die zijn gemaakt met de aanroep "add_library()" met de optie "MODULE", kan dit bestand worden gebruikt bij het linken met het commando "target_link_libraries()". Runtime-linken in AIX is standaard uitgeschakeld, omdat CMake nu alle noodzakelijke informatie over symbolen voor het linken tijdens het laden biedt. Om runtime-linken van dynamische bibliotheken of geladen modules toe te passen, moeten de opties "-Wl,-G" expliciet worden opgegeven in de lijst met linker-vlaggen die worden gedefinieerd via de variabelen "CMAKE_SHARED_LINKER_FLAGS" en "CMAKE_MODULE_LINKER_FLAGS".
Bron: opennet.ru
