1 Introduction à la précompilation

Avant de vous présenter CMake il faut que je vous parle du principe de la précompilation.

Pour le moment, nous nous contentions d'appeler le compilateur à la main, c'est très bien pour savoir ce que l'on fait, mais quand on doit compiler plusieurs fichiers et utiliser d'autres librairies que la librairies standard ça devient fastidieux. Donc, il nous faut un outil qui appel le compilateur en se tapant tout le boulot à notre place, c'est ça la précompilation.

Dans ce domaine, au début, on utilisait make, c'est un programme qui permet d'appeler le compilateur en lui passant plein de paramètre.

Si vous voulez installer make, vous pouvez faire comme ceci (de toute façon en s'en servira mais avec CMake):

sudo apt-get install make

Pour se servir de make il faut écrire un fichier de configuration qui s’appelle un makefile (c'est un peut comme un script).

Ce fichier s’appelle makefile (et c'est non négociable car make est maniaque).

Voici ce que l'on écrit dedans :

1
2
3
4
5
6
7
8
9
10
11
12
CXX = g++
NAME = exemple
CXX_FLAGS = -Wall -g3
RM = rm -f
INC = *.h
SRC = *.cpp
all :
	$(CXX) $(CXX_FLAGS) $(SRC) -o $(NAME)
clean :
	$(RM) *.o exemple
depend : $(INC)
	$(MAKEDEPEND) -y./ --$(CXX_FLAGS) --$(SRC) 2 > /dev/null

Traduction :

  • CXX = g++ : on utilise g++ comme compilateur
  • NAME = exemple : nom du programme à créer
  • CXX_FLAGS = -wall -g3 : comme les options que l'on a passé touta l'heure
  • RM = rm -f : définit une fonction d'effacement de fichiers
  • INC = *.h : on regroupe tout les fichiers header (.h)
  • SRC = *.cpp : on regroupe tout les fichiers source (.cpp)
  • $(CXX) $(CXX_FLAGS) $(SRC) -o $(NAME) : revient à faire g++ -wall -g3 main.cpp -o exemple
  • $(RM)*.o exemple revient à faire rm -f *.o exemple : on efface tout les .o et le fichier exemple (on nettoie le projet)
  • $(MAKEDEPEND) -y./ --$(CXX_FLAGS) --$(SRC) 2 > /dev/null : gère les dépendances du programme (si il a besoin d'autre libs pour fonctionner), mais on en a pas besoin pour l'instant

Et all:, clean: et depend: ?

Ce sont les options que l'on va passer à Make (le programme qui appel g++ en se servant d'un makefile).

  • all : on fait toute la compilation
  • clean : on nettoie le projet (on dégomme les .o et le binaire exemple)
  • depend : on gère les dépendances du programme

Voilà, je ne tiens pas particulièrement a ce que vous sachiez utiliser make tout seul, vous sevez déjà à quoi ressemble un makefile, et à quel point c'est horrible à écrire, donc vivement que je voue présente un truc plus simple à utiliser.

Si vous avez encore des questions sur Make regardez ici

Mais ça à l'air sympa make en fin de compte.

Et bien, le principale problème de make, c'est que si vous trouver un programme qui se compile avec make (et seulement make), vous êtes sûres à 90% que ce programme ne se compilera pas sur votre ordinateur, et ça c'est très génant.

Mais heureusement pour nous est arrivé CMake, un programme qui s'adapte aux différentes architectures, et là nous allons être heureux...