Utilisez Makefile en C++
Cet article présente plusieurs méthodes d’utilisation de Makefile en C++.
Utilisez Makefile pour compiler facilement un programme multi-fichier en C++
Makefile
est le nom du fichier qui décrit la relation entre les fichiers source du programme et les en-têtes à compiler. Ce fichier est utilisé par l’utilitaire make
qui est appelé sur la ligne de commande, et il agit comme un mini système de construction pour le projet de code. Notez cependant que make
n’est pas limité au langage de programmation et même à la compilation du programme, car il peut être utilisé dans des scénarios où les fichiers doivent être mis à jour en fonction des modifications apportées aux fichiers relatifs. Les relations sont représentées par l’ensemble de règles qui décrivent les actions spécifiques. L’extrait de code suivant montre la structure d’une règle typique. Un target
est généralement un nom pour les fichiers exécutables ou objets. Les prerequisites
sont généralement des fichiers d’entrée qui sont nécessaires pour sortir le fichier cible. Une recipe
est une action menée par le make
, et ils sont indentés avec l’onglet sur chaque nouvelle ligne. Notez que make
scanne le fichier nommé makefile
ou Makefile
s’il existe dans le répertoire de travail actuel.
target: prerequisites
recipe
Les règles sont la partie principale du Makefile
car elles sont la seule partie nécessaire. L’exemple suivant montre la structure simple Makefile
qui construit le fichier exécutable nommé program
. Maintenant, le program
a les prerequisites
- main.o
et library1.o
, qui sont des fichiers objets sortis des règles ci-dessous. Les deux ont leurs recettes respectives qui compilent certains prérequis pour obtenir la sortie donnée. Notez que la commande g++
est le compilateur GNU C++ qui s’exécute dans le cadre de la recette et peut être construit avec les arguments de ligne de commande habituels.
program : main.o library1.o
g++ -o program main.o library1.o
main.o : main.cpp header1.h
g++ -c main.cpp
library1.o : library1.cpp library1.h
g++ -c library1.cpp
Une autre caractéristique de Makefile
est des variables qui se comportent de la même manière que les expressions de macro du préprocesseur C++. À savoir, nous pouvons définir des alias de nom pour les chaînes qui apparaissent plusieurs fois dans le fichier et placer les noms de variables. Par exemple, l’extrait suivant montre la variable OBJ
définie au début du fichier, et il inclut les prérequis program
qui se répètent dans la première règle. Notez cependant que les variables sont les plus efficaces lorsque des chaînes beaucoup plus longues sont remplacées.
OBJ = main.o library1.o
program : $(OBJ)
g++ -o program $(OBJ)
main.o : main.cpp header1.h
g++ -c main.cpp
library1.o : library1.cpp library1.h
g++ -c library1.cpp
De plus, nous pouvons définir d’autres variables qui peuvent représenter des drapeaux de compilateur ou d’éditeur de liens, généralement utilisés à plusieurs endroits dans le Makefile
. Ainsi, lorsque le projet est gros, et que le Makefile
grossit, il est plus facile de modifier la ligne unique que de changer chaque instance du paramètre donné.
OBJ = main.o library1.o
CC = g++
LFLAGS = -lm
program : $(OBJ)
$(CC) -o $(LFLAGS) program $(OBJ)
main.o : main.cpp header1.h
$(CC) -c main.cpp
library1.o : library1.cpp library1.h
$(CC) -c library1.cpp
Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.
LinkedIn Facebook