Créer un fichier Makefile

Un article de LaPageDuJour.

(Redirigé depuis Créer un Makefile)
Aller à : Navigation, Rechercher

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 de Operation1 en fait)
  • Que Operation1 dépend d'Operation2 et d'Operation3 et exécute la commande commande-1
  • Que Operation2 exécute la commande commande-2
  • Que Operation3 exécute la commande commande-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++.