Newer
Older
cours-unix-shell / make / README.md
---
title: Make - UNIX
---

# Make - UNIX

GNU Make est un héritier de `make`, mais sous Linux, c'est bien GNU Make qui est
installé.

Make permet de gagner du temps par rapport aux shells: on n'exécute que ce qui
est nécessaire, en fonction des changements de source par rapport à leur cible.

Un shell fait tous les traitements qui y sont indiqués.

![Un shell fait tous les traitements qui y sont indiqués](../images/Shell.gif)

Un make ne fait que les traitements qui sont nécessaires.

![Un make ne fait que les traitements qui sont nécessaires](../images/Make.gif)

## Syntaxe

Le fichier `Makefile` contient les règles de dépendance.

Une règle est de la forme :

```make
cible: [fichier de départ] ...
	commande
```

> ⚠ La commande doit être précédée d'une tabulation!

Pour créer le fichier cible : `make cible`

Exemple de fichier `Makefile` :

```make
# Commentaire
compte.txt: aCompter.txt
	wc -l < aCompter.txt > compte.txt
```

La deuxième fois qu'on lance la cible `compte.txt`, la commande `wc` n'est pas
exécutée, sauf si le fichier `aCompter.txt` a une date de modification plus
récente que celle de `compte.txt`.

Une règle qui ne dépend d'aucun fichier de départ peut exister.  
De plus, elle ne peut donner lieu à la création d'un fichier.  
Une telle règle sera toujours exécutée (à condition que son nom ne soit pas
celui d'un fichier).

## Références

- <https://www.gnu.org/savannah-checkouts/gnu/make/manual/make.html> Make Manual
- <https://make.mad-scientist.net/> GNU Make
- <https://tech.davis-hansson.com/p/make/> Pour les spécialistes

[Précédent](../sed/tp.md) - [Suivant](./tp.md)