make est un programme permettant d'automatiser les différentes étapes de compilation permettant d'aboutir à la création de fichiers binaires exécutables.
Via le gestionnaire de paquets:
sudo apt-get install make
Le programme make lit les instructions qu'il devra exécuter dans le makefile, c'est en fait un simple fichier texte qui par convention est nommé Makefile ou makefile. Invoqué sans argument la commande make cherche un fichier nommé ainsi dans le répertoire courant. Pour spécifier un autre fichier utiliser l'option -f avec l'argument idoine:
$ make -f ./mon_fichier_make
Un makefile est un fichier texte respectant une syntaxe. Il se compose d'une ou plusieurs cibles (targets) des dépendances à satisfaire pour la création de chaque cible, et des instructions nécessaires a la création de chaque cible:
Un exemple rudimentaire ci-dessous:
hello: src/main.c gcc -Wall src/main.c -o build/hello
La cible est nommée hello. Après le caractère ':' sont listées les dépendances. Ici un seul fichier src/main.c. Une dépendance peut être un fichier ou une autre cible. Enfin en dessous avec indentation, une ou plusieurs instructions. Ce sont les commandes que make exécutera pour construire la cible courante.
Certaines règles utilisent des valeur identiques, dans ce cas factoriser dans des variables. Dans un Makefile, la définition d'une variable utilise la syntaxe suivante:
$MA_VAR=valeur
Un Makefile élémentaire comprenant 3 cibles
hello: src/main.c build gcc -g -Wall -std=c99 src/main.c -o build/hello build: if [ ! -d build ]; then mkdir build; fi clean: if [ -d ./build ]; then rm ./build/*; fi if [ -d ./build ]; then rmdir ./build; fi
Les cibles sans dépendances sont systématiquement exécutées par make tant qu'un fichier/dossier portant le nom de la cible n'existe pas dans le répertoire courant. Pour éviter ce genre de problématique il est préférable de déclarer ces cibles particulières via .PHONY
# Déclaration des cibles particulières .PHONY: all, install, clean