web-dev-qa-db-fra.com

Qu'est-ce qu'un générateur CMake?

J'ai lu la documentation.

Ça dit:

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

Qu'est-ce que cela veut dire exactement?

Si j'ai un ensemble de fichiers C++ dans mon projet, s'agit-il des fichiers d'entrée?

Si j'utilise Linux, quel est mon système de construction natif par défaut? Make?

Pourquoi les fichiers d'entrée doivent-ils être written par le générateur s'ils existent déjà?

15
batman

Qu'est-ce qu'un générateur?

Pour comprendre ce qu'est un générateur, nous devons d'abord examiner ce qu'est un système de construction. CMake ne compile ni ne lie aucun fichier source. Il utilisait un générateur to créer des fichiers de configuration pour un système de construction . Le système de construction utilise ces fichiers pour compiler et lier les fichiers de code source.

Alors, quel est un système de construction?

Un système de construction est un terme général qui regroupe un ensemble d'outils utilisés pour compiler et lier de manière générale le code source, mais il peut également inclure des outils auxiliaires utilisés lors d'un processus de construction. 

Par exemple, dans un système de construction à plusieurs étages, un exécutable peut être construit pour être utilisé dans le processus de construction d'une autre génération. 

En fonction de la chaîne d'outils utilisée sur un système, CMake générera plusieurs fichiers et dossiers pour permettre la création des fichiers source référencés dans les fichiers CMakeLists.txt et prenant en charge .cmake

Parfois, plusieurs systèmes de construction peuvent être installés sur un ordinateur. Par exemple, pour Windows, vous pouvez avoir un système de construction Visual Studio et MinGW. CMake vous permet de spécifier pour quels systèmes de construction générer des fichiers de configuration.

CMake inclut un certain nombre de générateurs Command-Line, IDE et Extra.

Générateurs d'outils de construction en ligne de commande

Ces générateurs sont destinés aux outils de construction en ligne de commande, tels que Make et Ninja. La chaîne d'outils choisie doit être configurée avant de générer le système de construction avec CMake. 

Les éléments suivants sont pris en charge (**):

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

IDE Générateurs d'outils de génération

Ces générateurs sont destinés à des environnements de développement intégrés qui incluent leur propre compilateur. Des exemples sont Visual Studio et Xcode, qui incluent un compilateur de manière native.

Les éléments suivants sont pris en charge (**):

  • 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

Générateurs supplémentaires

Ces générateurs créent une configuration pour travailler avec un autre outil IDE et doivent être inclus avec un générateur IDE ou une ligne de commande.

Les éléments suivants sont pris en charge (**):

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

Si j'ai un ensemble de fichiers C++ dans mon projet, s'agit-il des fichiers d'entrée?

Oui, ils sont certains des fichiers d'entrée. Pour un système de compilation, vous avez également un MakeFile. Pour Visual Studio, vous avez un fichier de solution (.sln). Avec les deux systèmes, CMake sait comment créer des fichiers supplémentaires à partir d'un fichier CMakeLists.txt approprié.

Si j'utilise Linux, quel est mon système de construction natif par défaut? Faire?

Généralement, oui, mais d’autres systèmes de compilation pourraient être configurés comme Ninja.

Pourquoi les fichiers d'entrée doivent-ils être écrits par le générateur s'ils existent déjà?

Certains fichiers sources existent peut-être déjà, mais CMake a la capacité de générer des fichiers d’en-tête et sources. Comme mentionné ci-dessus, il faut également générer des fichiers de configuration qui dépendent des fichiers source fournis dans le fichier CMakeLists.txt.

** Selon la documentation pour CMake version 3.9

16
jmstoker

Un générateur CMake est responsable de l'écriture des fichiers d'entrée pour un système de construction natif .

cela signifie que CMake prépare les scripts de génération pour un système de génération natif lorsqu'aucun générateur n'est spécifié. Sous Linux, le système de construction par défaut est Make et son fichier d'entrée est makefiles. Ils sont ensuite interprétés et une construction est exécutée en conséquence. Avant la première exécution de CMake, les scripts de compilation n'existent pas.

Les fichiers source C++ (ou tout autre fichier source) ne sont pas des fichiers d'entrée dans un système de construction. Les scripts de système de construction spécifient comment gérer le fichier source afin de produire des exécutables binaires.

2
Adam Kosiorek

Autant que je sache, le système de construction natif standard sous Unix est "GNU make (gmake)", appelé "make". Les gars de Google ont également publié un autre outil appelé "Ninja".

0
bench