CHacer o hacer. ¿Necesito ambos?

3 minutos de lectura

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?

Avatar de usuario de Florian
florián

Cómo enmarcar el concepto detrás de CMake

No es necesario aprender a escribir un makefileya 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
  • multiplataforma
  • 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 con ninja 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 detallada
  • make clean para limpiar
  • make install y el DESTDIR parámetros

CMake es un meta-sistema de compilación.

Usando cmake y los ajustes en CMakeLists.txtCMake 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


¿Ha sido útil esta solución?