lanzamiento del generador de scripts de construcción de código abierto multiplataforma , 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 de CMake está escrito en C++ y se distribuye bajo la licencia BSD.
CMake es notable por proporcionar un lenguaje de scripts simple, con medios para extender su funcionalidad a través de módulos, un mínimo número de dependencias (sin requerir M4, Perl o Python), soporte de caché, herramientas para compilación cruzada, generación de archivos de construcción para una amplia gama de sistemas de construcción y compiladores, herramientas ctest y cpack para definir scripts de prueba y empaquetado, y una utilidad cmake-gui para la configuración interactiva de parámetros de construcción.
Principales :
- Se añadió soporte para los lenguajes Objective C («OBJC») y Objective
C++ («OBJCXX»), que pueden ser activados a través de los comandos project() y enable_language(), después de lo cual el código en los archivos «.m» y «.mm» se compilará como código en Objective C y Objective C++, en lugar de como código en C++, como se hacía anteriormente; - Se añadió soporte para el compilador Clang en la plataforma Solaris;
- Se añadieron nuevos parámetros de línea de comandos: «cmake -E true|false» para devolver códigos de salida 0 y 1; «cmake —trace-redirect=» para redirigir la información de rastreo a un archivo, en lugar de
«stderr»; el comando «cmake —loglevel» fue renombrado a «—log-level» para alinearse con la nomenclatura de los demás comandos; - Se añadió el comando «target_precompile_headers()» para enumerar la lista de archivos de encabezado utilizados durante la precompilación (lo que reduce el tiempo de compilación);
- Se añadió la propiedad «UNITY_BUILD», que activa el modo de procesamiento por lotes de archivos fuente en generadores para acelerar la compilación;
- Se añadieron los comandos «find_file()», «find_library()», «find_path()»,
«find_package()» y «find_program()» para buscar archivos, bibliotecas, rutas, paquetes y ejecutables de acuerdo con las variables que definen las rutas de búsqueda para diversas categorías de archivos.
Para gestionar las rutas básicas de búsqueda se utilizan las variables «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» y «CMAKE_FIND_USE_PACKAGE_REGISTRY»; - Se añadió al comando «file()» el modo «file(GET_RUNTIME_DEPENDENCIES)», que permite extraer de forma recursiva la lista de bibliotecas implicadas en el enlace dinámico de un ejecutable o biblioteca. Este modo ha reemplazado al comando GetPrerequisites(), que ahora está obsoleto;
- En el comando «ctest(1)» se implementó la capacidad de serializar pruebas, basándose en los recursos requeridos para cada prueba;
- Se declaró obsoleta la variable «CMAKE_FIND_PACKAGE_NO_PACKAGE_REGISTRY», que debe ser reemplazada por «CMAKE_FIND_USE_PACKAGE_REGISTRY»;
- Mejora del soporte para la plataforma AIX. Al utilizar la propiedad "ENABLE_EXPORTS", además del archivo ejecutable, ahora se genera un archivo de importación para el enlazador, que se guarda con la extensión ".imp". En los plugins creados mediante la llamada "add_library()" con la opción "MODULE", este archivo puede usarse al enlazar mediante el comando "target_link_libraries()". El enlace en tiempo de ejecución en AIX está deshabilitado por defecto, ya que CMake ahora proporciona toda la información necesaria sobre los símbolos para el enlace durante la carga. Para aplicar el enlace en tiempo de ejecución de bibliotecas dinámicas o módulos cargados, se deben especificar explícitamente las opciones "-Wl,-G" en las listas de flags del enlazador, las cuales se definen a través de las variables "CMAKE_SHARED_LINKER_FLAGS" y "CMAKE_MODULE_LINKER_FLAGS".
Fuente: opennet.ru
