cmake generator

¿Qué es un generador CMake?



generator (3)

Leí la documentación.

Dice:

A CMake Generator is responsible for writing the input files for a native build system.

¿Qué significa eso exactamente?

Si tengo un conjunto de archivos C ++ en mi proyecto, ¿son estos los archivos de entrada?

Si estoy usando Linux, ¿cuál es mi sistema de compilación nativo de forma predeterminada? Make ?

¿Por qué los archivos de entrada deben ser written por el generador si ya existen?


Un CMake Generator es responsable de escribir los archivos de entrada para un sistema de compilación nativo.

significa que CMake prepara scripts de compilación para un sistema de compilación nativo cuando no se especifica ningún generador. En Linux, el sistema de compilación predeterminado es Make y su archivo de entrada son makefiles , que luego se interpretan y una compilación se ejecuta en consecuencia. Antes de la primera ejecución de los scripts de compilación CMake no existen.

Los archivos fuente C ++ (o cualquier otro archivo fuente) no son archivos de entrada a un sistema de compilación. Los scripts de compilación del sistema especifican cómo manejar el archivo fuente para producir ejecutables binarios.


Por lo que sé, el sistema de compilación nativo estándar en Unix es "GNU make (gmake)" conocido como "make". Los chicos de Google también lanzaron una herramienta diferente llamada "Ninja".


¿Qué es un generador?

Para entender qué es un generador, primero debemos ver qué es un sistema de compilación. CMake no compila ni vincula ningún archivo fuente. Usó un generador para crear archivos de configuración para un sistema de compilación . El sistema de compilación usa esos archivos para compilar y vincular archivos de código fuente.

Entonces, ¿qué es un sistema de compilación?

Un sistema de compilación es un término amplio que agrupa un conjunto de herramientas utilizadas para compilar y vincular código fuente en general, pero también puede incluir herramientas auxiliares utilizadas durante un proceso de compilación.

Por ejemplo, en un sistema de compilación de varias etapas, se puede construir un ejecutable para usarlo en el proceso de compilación de otra compilación.

Dependiendo de la cadena de herramientas utilizada en un sistema, CMake generará múltiples archivos y carpetas para permitir la creación de los archivos de origen a los que se hace referencia en CMakeLists.txt y los archivos .cmake compatibles.

En ocasiones, se pueden instalar varios sistemas de compilación en una computadora, como Windows, podría tener un sistema de compilación Visual Studio y MinGW. CMake le permite especificar para qué generarán los archivos de configuración los sistemas de compilación.

CMake incluye una serie de generadores de Command-Line de Command-Line , IDE y Extra .

Generadores de herramientas de compilación de línea de comandos

Estos generadores son para herramientas de compilación de línea de comando, como Make y Ninja. La cadena de herramientas elegida debe configurarse antes de generar el sistema de compilación con CMake.

Los siguientes son compatibles (**):

  • Borland Makefiles
  • MSYS Makefiles
  • MinGW Makefiles
  • NMake Makefiles
  • NMake Makefiles JOM
  • Ninja
  • Unix Makefiles
  • Watcom WMake

IDE Build Tool Generators

Estos generadores son para Entornos de Desarrollo Integrado que incluyen su propio compilador. Los ejemplos son Visual Studio y Xcode que incluyen un compilador de forma nativa.

Los siguientes son compatibles (**):

  • Visual Studio 6
  • Visual Studio 7
  • Visual Studio 7 .NET 2003
  • Visual Studio 8 2005
  • Visual Studio 9 2008
  • Visual Studio 10 2010
  • Visual Studio 11 2012
  • Visual Studio 12 2013
  • Visual Studio 14 2015
  • Visual Studio 15 2017
  • Green Hills MULTI
  • Xcode

Generadores extra

Estos son generadores que crean una configuración para trabajar con una herramienta IDE alternativa y deben incluirse con un IDE o un generador de línea de comando.

Los siguientes son compatibles (**):

  • CodeBlocks
  • CodeLite
  • Eclipse CDT4
  • KDevelop3
  • Kate
  • Sublime Text 2

Si tengo un conjunto de archivos C ++ en mi proyecto, ¿son estos los archivos de entrada?

Sí, son algunos de los archivos de entrada. Para un sistema make build también tienes un MakeFile. Para Visual Studio tiene un archivo de solución (.sln). Con ambos sistemas, se necesitan archivos adicionales que CMake sepa cómo crear, dado un archivo CMakeLists.txt adecuado.

Si estoy usando Linux, ¿cuál es mi sistema de compilación nativo de forma predeterminada? ¿Hacer?

En general, sí, pero otros sistemas de compilación podrían configurarse como Ninja.

¿Por qué los archivos de entrada deben ser escritos por el generador si ya existen?

Es posible que algunos archivos fuente ya existan, pero CMake tiene la capacidad de generar archivos de cabecera y fuente. Además, como se mencionó anteriormente, hay archivos de configuración que deben generarse y que dependen de los archivos fuente proporcionados en el archivo CMakeLists.txt.

** De acuerdo con la documentación de CMake versión 3.9