La commande make
Commande super intéressante pour celui qui développe par exemple un projet avec plusieurs fichiers en utilisant les langages C, C++ ou java, ...
En effet, ce programme permet de recontruire uniquement les fichiers objets qui sont:
- inexistant
- dont le source est modifié
- si des fichiers dont ils dépendent sont eux aussi modifiés.
Bref, plutôt que de tout recompiler systématiquement, ne compiler que ce qui est nécessaire ! D'autres actions seront aussi possible.
Pour parvenir à cela, il faut créer un fichier nommé makefile dans le répertoire de votre projet.
La structure du fichier makefile est la suivante:
cible : dependance1 dependance2
... dependance n
<tabulation>action
Traduction: L'action à faire sur la cible dépendra des éventuelles modifications des dépendances listées...
avec:
cible est le fichier objet à générer s'il n'existe pas encore ou si un fichier dont il dépend est modifié.
dependance, les fichiers dont dépend l'objet, si l'un d'eux est modifié après la dernière génération de cible, alors cible sera reconstruite.
action l'action à faire pour générer le fichier cible.
Appuyez
bien sur la touche tabulation avant action. Si vous mettez un espace, vous aurez
un message du type "Une commande shell doit être précédée
d'une tabulation" ou encore "séparateur manquant". Si
vous commencez directement avec l'action, il va considérer qu'il s'agit
d'une cible et indique qu'il faut mettre un : après la cible.
Certains éditeurs
(comme kwrite) remplacent automatiquement les tabulations par des espaces !!!
Par conséquent, vous aurez les erreurs comme indiquées ci-dessus
!
on pourra mettre
des commentaires en mettant des # en début de ligne.
Pour utiliser la commande make, il suffit de taper make cible (en étant dans le répertoire où se trouve le fichier makefile évidemment !)
Erreurs de compilations
Cf. GCC
Exemple:
Voici un exemple de fichier makefile:
- On suppose que l'on a un fichier main.c main.h traitement.c traitement.h.
- Les dependances sont les suivantes:
Pour main.c on a main.h et traitement.h
Pour traitement.c on a besoin que de traitement.h
- On genere un fichier nommé monprog.
Voici ce que pourrait contenir le fichier makefile:
# Pour tout reconstruire, on a besoin de monprog:
all : monprog
Variables prédéfinies
Il existe des variables prédéfinies: http://www.gnu.org/software/make/manual/make.html#Implicit-Variables
Exemple $+ qui est fort utile los du linkage pour reprendre tous les .o référencés comme paramètres d'entrée pour la génération de votre exécutable. Cela évite de tout retaper une seconde fois !
Ou encore $@ pour nommer le fichier exécutable du même nom que celui utilisé pour la règle.
Annexes
La documentation complète en anglais.