Pregunta de novato. Recientemente me encontré con un proyecto que contenía muchos archivos y bibliotecas externas. Algunas de estas bibliotecas contenían Makefiles y CMakeLists.txt. Estoy construyendo un proyecto similar que involucra bibliotecas externas. ¿Es necesario aprender tanto CMake como make. ¿O es CMake suficiente?
florián
Cómo enmarcar el concepto detrás de CMake
No es necesario aprender a escribir un makefile
ya que CMake es un capa de abstracción o “meta-make” generando los archivos MAKE por usted. Y como cualquier capa de abstracción, solo necesitas aprender a usar sus funciones. Pero también necesita comprender la tarea para la que fue desarrollado. En este caso, por ejemplo, ¿Qué es una herramienta de compilación? o ¿Qué es un entorno de compilación nativo?
¿Qué significa la “c” en cmmake?
Pero cmake, en combinación con ctest, cpack y cdash, es mucho más que eso, elimina (principalmente) la necesidad de aprender los conmutadores del compilador/enlazador, el manejo de bibliotecas/ejecutables de sus plataformas/marcos y su instalación, etc.
- Compilación cruzada
- Admite muchos formatos de salida de entornos de construcción diferentes resumidos en Generadores CMake
- Por ejemplo, abstrae los interruptores específicos del compilador en Funciones de compilación de CMake
- multiplataforma
- Funciona en todo tipo de sistemas operativos (resumido en Página de descarga de CMake) con diferentes configuraciones
- Funciona con o está directamente integrado en muchos IDE o editores como por ejemplo Estudio visual o CLión
- Puede realizar una compilación cruzada en plataformas de destino específicas como, por ejemplo, Androide resumido en Cadenas de herramientas CMake
- multilingüe
- Es compatible principalmente con C/C++, pero también tiene soporte para, por ejemplo, Asm, RC, Fortran y con CMake versión 3.8 C#
- Elimina la necesidad de aprender otros lenguajes de secuencias de comandos (a menudo utilizados para realizar pasos previos o posteriores a la compilación), porque tiene un lenguaje de secuencias de comandos de tamaño medio integrado
Diferencia entre usar Makefile y cmake para compilar el código
De mi experiencia con el uso de CMake en mis proyectos:
-
La desventaja: debe ponerlo a prueba en todos sus entornos específicos (ciertamente, eso no es nada específico para CMake). En un entorno cerrado (por ejemplo, dentro de una empresa) es relativamente fácil de mantener, pero, por ejemplo, en una configuración de código abierto, siempre habrá uno u otro precedente en el que deberá modificar un poco su script CMake.
-
La ventaja: CMake es ampliamente utilizado/admitido en proyectos C/C++ y me da, como usuario potencial de su proyecto, la opción de tomar mi entorno de construcción y hacer la herramienta de elección (por ejemplo, he reemplazado
make
conninja
en mis proyectos).
Referencias
- Sistemas de compilación C++: ¿qué usar?
- Sistemas de compilación C++
CMake es un generador de Makefile (y otros archivos de proyecto). no necesitas aprender make
a menos que vaya a conectarse a CMake mismo.
Sin embargo, algunos clásicos make
los conocimientos siguen siendo útiles, tales como:
- pasando el
-j
bandera para paralelo make V=1
para salida detalladamake clean
para limpiarmake install
y elDESTDIR
parámetros
CMake es un meta-sistema de compilación.
Usando cmake
y los ajustes en CMakeLists.txt
CMake lo hará generar los archivos de compilación para la plataforma de destino. Podrían ser Makefiles, soluciones de Visual Studio, archivos Ninja, archivos de proyecto de KDevelop, …
Si el proyecto está configurado para utilizar CMake, no debería necesitar ni siquiera mirar en los buildfiles (Makefiles) generados. Son estrictamente temporales.
-
@Rienhart_: ¿Puedo anunciar descaradamente MANDÍBULAS – ¿una configuración de CMake lista para usar creada por mí mismo, que hace una gran cantidad de “exhibición” que encontré que faltaba en la documentación oficial? Puede que le resulte útil para entender cómo funciona CMake.
– DevSolar
27 de abril de 2017 a las 9:27