CMake si distingue per fornire un linguaggio di scripting semplice, un mezzo per estendere le funzionalità tramite moduli, un numero minimo di dipendenze (nessun legame con M4, Perl o Python), supporto per la memorizzazione nella cache, presenza di strumenti per la compilazione incrociata, supporto per la generazione di build file per un'ampia gamma di sistemi di compilazione e compilatori, la presenza di utilità ctest e cpack per definire script di test e creare pacchetti, utilità cmake-gui per impostare in modo interattivo i parametri di compilazione.
Il principale
- Aggiunto supporto per Objective C ("OBJC") e linguaggi Objective
C++ ("OBJCXX"), che può essere abilitato tramite i comandi project() e abilita_lingua(), dopodiché il codice nei file ".m" ".mm" verrà compilato come codice Objective C e Objective C++, anziché come C++, come era prima; - Aggiunto il supporto per il compilatore Clang sulla piattaforma Solaris;
- Aggiunte nuove opzioni della riga di comando: “cmake -E true|false” per stampare i codici di ritorno 0 e 1; "cmake --trace-redirect=" per reindirizzare invece le informazioni di traccia su un file
"stderr"; il comando "cmake --loglevel" è stato rinominato in "--log-level" per allinearlo ai nomi degli altri comandi; - Aggiunto il comando “target_precompile_headers()” per elencare l'elenco dei file header utilizzati durante la precompilazione (riduce il tempo di compilazione);
- Aggiunta la proprietà “UNITY_BUILD”, che attiva la modalità batch per l'elaborazione dei file sorgente nei generatori per velocizzare la build;
- Aggiunti comandi “find_file()”, “find_library()”, “find_path()”,
"find_package()" e "find_program()" per cercare file, librerie, percorsi, pacchetti ed eseguibili in base a variabili che definiscono percorsi di ricerca per varie categorie di file.
Le variabili "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" e "CMAKE_FIND_USE_PACKAGE_RE" vengono utilizzate per controllare i percorsi di ricerca di base GISTRY"; - Aggiunta la modalità “file(GET_RUNTIME_DEPENDENCIES)” al comando “file()”, che consente di recuperare ricorsivamente l'elenco delle librerie utilizzate quando si collega dinamicamente un file eseguibile o una libreria. La modalità ha sostituito il comando GetPrerequisites(), che ora è stato deprecato;
- Il comando “ctest(1)” implementa la capacità di serializzare i test in base alle risorse richieste per ciascun test;
- La variabile "CMAKE_FIND_PACKAGE_NO_PACKAGE_REGISTRY" è stata deprecata e dovrebbe essere sostituita da "CMAKE_FIND_USE_PACKAGE_REGISTRY";
- Supporto della piattaforma AIX migliorato. Quando si utilizza la proprietà "ENABLE_EXPORTS", oltre al file eseguibile, ora viene generato un file di importazione per il linker, salvato con l'estensione ".imp". Nei plugin creati chiamando "add_library()" con l'opzione "MODULE", questo file può essere utilizzato durante il collegamento utilizzando il comando "target_link_libraries()". Il collegamento di runtime su AIX è disabilitato per impostazione predefinita perché CMake ora fornisce tutte le informazioni sui simboli necessarie per il collegamento in fase di caricamento. Per utilizzare il collegamento runtime di librerie dinamiche o moduli caricabili, è necessario specificare esplicitamente le opzioni “-Wl, -G” negli elenchi dei flag di avvio del linker, definiti tramite le variabili “CMAKE_SHARED_LINKER_FLAGS” e “CMAKE_MODULE_LINKER_FLAGS”.
Fonte: opennet.ru