Créer un fichier Makefile
Un article de LaPageDuJour.
Un MakeFile est un fichier utilisé par l'application make qui permet de gérer des opérations dépendant les unes des autres et dont certaines opérations ne doivent être effectuées qu'à la modification d'un fichier.
Concrètement, les Makefile sont très couramment utilisé (surtout avec le compilateur gcc) pour générer des applications nécessitant la compilation de plusieurs fichiers.
Sommaire |
[modifier] Fonctionnement d'un fichier Makefile
Un fichier Makefile permet d'organiser des opérations en fonction des dépendances de chaque opération par rapport aux autres.
La syntaxe d'un fichier makefile est telle quelle :
VAR=toto
all: Operation1
Operation1: Operation2 Operation3 fichier1
commande-1 -x $VAR fichier1
Operation2: commande-2
commande-2 -x $VAR fichier2
Operation3: commande-3
commande-3 -x $VAR fichier3
Ce fichier va spécifier:
- La valeur d'une variable qui sera ensuite passée en argument à toutes les commandes.
- Que l'opération centrale est
Operation1(que l'opération principale dépend deOperation1en fait) - Que
Operation1dépend d'Operation2et d'Operation3et exécute la commandecommande-1 - Que
Operation2exécute la commandecommande-2 - Que
Operation3exécute la commandecommande-3
Ce fichier va exécuter la première fois :
-
commande-2 -
commande-3 -
commande-1
A la prochaine execution de "make", aucune commande ne sera éxécutée.
Il est souvent pratique de remplacer les opérations à effectuer par les fichiers finaux désirés directement.
Par ailleurs, si la commande commande-2 ou commande-3 est modifiée. Alors, à la prochaine éxecution de "make"
[modifier] Exemple de fichier
Ce fichier Makefile sert à générer des plugins pour Nagios. Ces 3 plugins nécessitent tous l'utilisation d'une classe de gestion SNMP.
# Compilateur utilisé COMP=g++ # Options de compilation COMP_OPT=-W -Wall -O3 -march=i686 -DDEBUG # Repertoire de destination DEST=/usr/local/nagios/libexec/ # Tous les fichiers que nous souhaitons obtenir à la fin all: bin/check_snmp_win_cpu bin/check_snmp_win_ram bin/check_snmp_hp_printer # Les librairis que nous souhaitons obtenir lib/snmp.class.o: src/snmp.class.cpp $(COMP) -c src/snmp.class.cpp -o lib/snmp.class.o $(COMP_OPT) # Compilation des executables bin/check_snmp_win_cpu: lib/snmp.class.o src/check_snmp_win_cpu.cpp $(COMP) lib/snmp.class.o src/check_snmp_win_cpu.cpp -o bin/check_snmp_win_cpu $(COMP_OPT) bin/check_snmp_win_ram: lib/snmp.class.o src/check_snmp_win_ram.cpp $(COMP) lib/snmp.class.o src/check_snmp_win_ram.cpp -o bin/check_snmp_win_ram $(COMP_OPT) bin/check_snmp_hp_printer: lib/snmp.class.o src/check_snmp_hp_printer.cpp $(COMP) lib/snmp.class.o src/check_snmp_hp_printer.cpp -o bin/check_snmp_hp_printer $(COMP_OPT) # Installation de tous les binaires install: all chmod a+rx bin/* cp bin/* ${DEST} # Commande de nettoyage de tous les binaires clean: rm -f lib/* rm -f bin/*
Voilà ce que donne ce programme :
/home/superfc/plugins# make g++ -c src/snmp.class.cpp -o lib/snmp.class.o -W -Wall -O3 -march=i686 -DDEBUG g++ lib/snmp.class.o src/check_snmp_win_cpu.cpp -o bin/check_snmp_win_cpu -W -Wall -O3 -march=i686 -DDEBUG g++ lib/snmp.class.o src/check_snmp_win_ram.cpp -o bin/check_snmp_win_ram -W -Wall -O3 -march=i686 -DDEBUG g++ lib/snmp.class.o src/check_snmp_hp_printer.cpp -o bin/check_snmp_hp_printer -W -Wall -O3 -march=i686 -DDEBUG
[modifier] Dans votre système
[modifier] Sous Linux
Le programme make est inclus dans la plupart des systèmes. Vous avez installé un système minimal comme je le conseillais dans mon cours Linux, vous n'avez qu'à exécuter la commander apt-get install make -y pour l'installer.
[modifier] Sous Windows
Ce programme est inclus dans tous les environnements de développement qui utilisent GCC. Le meilleur exemple est peut-être Eclipse C++.