Presentado por lanzamiento de un generador de scripts de compilación abierto multiplataforma CMake 3.17, que actúa como una alternativa a Autotools y se utiliza en proyectos como KDE, LLVM/Clang, MySQL, MariaDB, ReactOS y Blender. El código CMake está escrito en C++ y distribuido bajo la licencia BSD.
CMake se destaca por proporcionar un lenguaje de secuencias de comandos simple, un medio para extender la funcionalidad a través de módulos, un número mínimo de dependencias (sin vinculación a M4, Perl o Python), soporte de almacenamiento en caché, la presencia de herramientas para compilación cruzada, soporte para generar compilaciones. archivos para una amplia gama de sistemas de compilación y compiladores, la presencia de utilidades ctest y cpack para definir scripts de prueba y crear paquetes, utilidad cmake-gui para configurar interactivamente los parámetros de compilación.
Se agregó un nuevo generador de scripts de ensamblaje basado en el kit de herramientas Ninja: "Ninja Multi-Config", que se diferencia del generador anterior en la capacidad de procesar varias configuraciones de ensamblaje a la vez.
En el generador de scripts ensambladores para Visual Studio apareció la capacidad de definir archivos fuente asociados con cada configuración (fuentes por configuración).
La capacidad de configurar metaparámetros para CUDA (“cuda_std_03”, “cuda_std_14”, etc.) se ha agregado a las herramientas para configurar parámetros del compilador (Funciones de compilación).
Se agregaron variables "CMAKE_CUDA_RUNTIME_LIBRARY" y "CUDA_RUNTIME_LIBRARY" para seleccionar el tipo de bibliotecas de tiempo de ejecución cuando se usa CUDA.
Se agregó el módulo "FindCUDAToolkit" para determinar el kit de herramientas CUDA disponible en el sistema sin habilitar el lenguaje CUDA.
Se agregó el comando "--debug-find" a cmake para generar diagnósticos legibles adicionales al realizar operaciones de búsqueda. Para propósitos similares, se ha agregado la variable CMAKE_FIND_DEBUG_MODE.
Se agregó soporte para buscar herramientas CURL utilizando archivos de configuración generados por cmake “CURLConfig.cmake” al módulo “FindCURL”. Para deshabilitar este comportamiento, se proporciona la variable CURL_NO_CURL_CMAKE.
El módulo FindPython ha agregado la capacidad de buscar componentes de Python en entornos virtuales administrados mediante “conda”.
La utilidad ctest ha agregado las opciones “--no-tests=[error|ignore]” para definir el comportamiento en caso de que no haya pruebas y “--repeat” para establecer las condiciones para volver a ejecutar las pruebas (hasta que se apruebe, después del tiempo de espera).
Las propiedades de destino de compilación INTERFACE_LINK_OPTIONS, INTERFACE_LINK_DIRECTORIES e INTERFACE_LINK_DEPENDS ahora se incluyen entre las dependencias internas de las bibliotecas construidas estáticamente.
Cuando se utiliza el kit de herramientas MinGW, la búsqueda de archivos DLL con el comando find_library está deshabilitada de forma predeterminada (en cambio, el intento predeterminado es importar bibliotecas ".dll.a").
La lógica para seleccionar la utilidad ninja en el generador Ninja ahora no depende del nombre del archivo ejecutable: se utiliza la primera utilidad ninja-build, ninja o samu que se encuentra en las rutas definidas a través de la variable de entorno PATH.
Se agregó un comando "-E rm" a cmake que se puede usar para eliminar archivos y directorios en lugar de los comandos separados "-E remove" y "-E remove_directory".