IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)



Qu'est ce qu'un Makefile ?
auteur : MarcG
Les sources d?un logiciel comprennent beaucoup de fichiers, incorporent des librairies et taper à la main les lignes de compilation de chacun des fichiers serait très fastidieux. Pour simplifier les compilations de projets sous Unix, il existe l?utilitaire make : il permet d'interpréter un fichier de dépendance entre les différents éléments nécessaires à la création d'un projet. Ce fichier est appelé Makefile. Il définit les relations entre des fichiers qui permettent d'établir les dépendances nécessaires à la création d'autres fichiers. Si, pour créer un fichier A, il faut utiliser un fichier B, alors il va d'abord falloir créer le fichier B. Le travail de make est essentiellement de vérifier les dates des fichiers pour déterminer quels sont ceux qui sont à jour et ceux qu'il faut recréer afin de générer le projet. Pour chacun des fichiers à recréer, make détermine gràce au makefile les librairies à lier, et les arguments à passer à gcc puis lance la compilation. make simplifie beaucoup le travail du programmeur puisqu'au lieu de taper les argument de gcc à chaque compilation, il suffit de lancer make. En général, les fichiers makefile contiennent une cible nommée « all », qui permet de générer tout le projet. Make peut aussi être utilisé dans un autre contexte que la programmation : il permet d'éffectuer des commandes de mises à jour de fichiers qui dépendent de la mise à jour d'autres fichiers.


Synthaxe d'un makefile
auteur : MarcG
target: dépendance_1 dependance_2 [...] (tab) action 1 à faire pour créer target (tab) action 2 à faire pour créer target |...]


Makefile : utilisation poussée
auteur : MarcG
un make file est comme un script shell et supporte les variables : déclaration de a :

a = truc
lecture de a : $(a) exemple simple :

#!make YamsDIR= . COMPILER = g++ LINKER = ld #OPTIONS = -O3 -Wall # projet terminé OPTIONS = -g -Wall # débuggage NAME = yams INCLUDE = -Iincludes/ LIBS = -lpthread OBJETS = biblio.o KernelKit.o Kits.o all: $(NAME) $(NAME): $(OBJETS) g++ $(OPTIONS) -o $(NAME) $(OBJETS) $(LIBS) bilbio.o: bilio.cpp bilio.h g++ $(OPTIONS) -c biblio.cpp $(INCLUDE) Kits.o: Kits/Kits.cpp Kits/Kits.h g++ $(OPTIONS) -c Kits/Kits.cpp $(INCLUDE) KernelKit.o: KernelKit/KernelKit.cpp KernelKit/KernelKit.h g++ $(OPTIONS) -c KernelKit/KernelKit.cpp $(INCLUDE) [...] clean : rm $(OBJETS) clean-all: clean rm $(NAME)


Ce document issu de www.developpez.com est soumis à la licence GNU FDL traduit en français ici
Permission vous est donnée de distribuer, modifier des copies de cette page tant que cette note apparaît clairement.