Choisissez votre style : colorisé, impression

Série 18  (Niveau 0):
Compilation séparée : cmake

Buts

Jusqu'ici chacun de vos programmes était entièrement rédigé dans un seul fichier. Pour des programmes plus ambitieux et plus importants en taille (ce que l'on appelle des projets), il est important d'opter pour une approche plus modulaireplusieurs fichiers sont utilisés pour stocker différents composants du projet.

Un programme "éclaté" sur plusieurs fichiers est laborieux à compiler à la main. Il existe des alternatives automatisant le processus et cet exercice a pour but de vous montrer comment fonctionne l'un deux :CMake. CMake est ce que l'on appelle un outil de construction de projet (compilation + génération de l'exécutable).

Nous profiterons de cet exercice pour introduire certaines bonnes pratiques concernant l'organisation de vos fichiers dans un projet.

Commencez par créer un répertoire ~/Desktop/myfiles/Programmation/cpp/serie18/exoCmake/. Vous y ferez les manipulations suggérées dans l'exercice.

Pour réaliser cet exercice, vous ne devez pas créer de projet dans QtCreator pour commencer. Vous devez attendre d'avoir un fichier CMakeLists.txt avant de pouvoir le faire (ce qui vous sera expliqué un peu plus bas).

Un programme sur plusieurs fichiers

Soit le programme suivant, contenu dans un fichier Application.cpp :

#include <iostream>
#include <string>
using namespace std;

// une classe pour représenter une personne
class Personne
{
   // quelques méthodes utiles
   
public:
   // méthode d'initialisation (à remplacer par un
   //  constructeur dès que vus en cours!!)
	Personne(string nom,string prenom,int age)
		: nom(nom)
		, prenom(prenom)
		, age(age)
		{
           // Rien
		}
  
  // méthode affichant les infos d'une personne
   void afficher() {
          cout <<  "Nom: " << this->nom << endl;
          cout <<  "Prenom: " << this->prenom << endl;
          cout <<  "Age: "  << this->age << endl;
   }
  
  //incremente l'age de la personne
   void anniversaire() {
         age++;
   }
   
   //déclaration des attributs en privé, comme il se doit
 private:
  std::string nom; //le nom
  std::string prenom; //le prenom
  int age;//l'age
};

//PROGRAMME PRINCIPAL
int main (){
   Personne stan("Wawrinka","Stan", 33);
   stan.afficher();
   return 0;
}

Il contient la définition d'une classe Personne (lignes 6 à 38) utilisée par un programme principal (lignes 40 à 44).

Pour compiler un tel programme, vous êtes habitués à :

En examinant le contenu, on peut se dire que la classe Personne peut-être utile dans bien d'autres contextes que celui du programme principal de Application.cpp !

Il serait donc bien d'en faire un module à part.

Il n'est pas nécessaire de créer les fichiers ci-dessous, il vous seront fournis un peu plus bas.

Pour créer un module relatif à la classe Personne, on utilisera deux fichiers :