MAKE
Table des matières
Retour à l'index
NOM
make — Utilitaire GNU Make pour la maintenance de groupes de programmes
SYNOPSIS
make [OPTION]... [CIBLE]...
DESCRIPTION
L'utilitaire make détermine automatiquement quels éléments d'un programme
complexe doivent être recompilés et génère les commandes appropriées à cette
recompilation. Ce manuel décrit l'implémentation GNU de make qui a été
écrite par Richard Stallman et Roland McGrath, et est actuellement
entretenue par Paul Smith. Nos exemples montrent des programmes en
langage C, car ils sont parmi les plus courants, mais vous pouvez utiliser
make avec tout langage de programmation dont le compilateur peut être
invoqué à l'aide de l'interpréteur de commandes. En fait, l'usage de make
ne se limite pas aux programmes. Vous pouvez aussi l'utiliser pour toute
tâche où certains fichiers doivent être automatiquement mis à jour à partir
d'autres fichiers chaque fois que ces autres fichiers sont modifiés.
Préalablement à l'utilisation de make, vous devez écrire un fichier qui
se nomme le makefile et qui décrit les relations entre les fichiers de
votre programme et fournit les commandes pour mettre à jour chacun d'entre
eux. Dans un programme, le fichier exécutable est en général mis à jour à
partir des fichiers objet, qui sont eux-mêmes générés en compilant les
fichiers source.
Une fois le fichier makefile écrit, chaque fois que vous modifierez un ou
plusieurs fichiers source, la simple commande de l'interpréteur :
-
make
suffira pour effectuer toutes les recompilations nécessaires. Le programme
make utilise les descriptions du makefile et la date de dernière
modification des fichiers pour déterminer lesquels doivent être mis à
jour. Pour chacun d'entre eux, il génère les commandes enregistrées dans le
makefile.
make exécute les commandes du makefile pour mettre à jour une ou
plusieurs cibles, chacune des cibles correspondant habituellement à un
programme. Si aucune option -f n'est présente, make va rechercher les
fichiers de description GNUmakefile, makefile et Makefile, dans cet
ordre.
Normalement, vous devez nommer votre fichier makefile makefile ou
Makefile (nous recommandons Makefile, car il apparaîtra alors en
premier au début du listing du contenu d'un répertoire et à proximité
d'autres fichiers importants comme README). Le premier nom de fichier
recherché, GNUmakefile, n'est pas recommandé pour la plupart des
makefile. Ce nom devra cependant être utilisé si votre makefile est
spécifique à GNU Make et ne sera pas compréhensible par les autres versions
de make. Si makefile est « - », c'est l'entrée standard qui est lue.
make met à jour une cible si elle dépend de fichiers prérequis qui ont
été modifiés depuis la dernière modification de cette cible ou si cette
cible n'existe pas.
OPTIONS
- -b, -m
-
Ces options sont ignorées pour des raisons de compatibilité avec les autres
versions de make.
- -B, --always-make
-
Traiter toutes les cibles de manière inconditionnelle.
- -C répertoire, --directory=répertoire
-
Se positionner dans le répertoire répertoire avant de lire les makefile
ou de faire quoi que ce soit. Si plusieurs options -C sont spécifiées,
chacune d'entre elles est interprétée relativement à la précédente : -C /
-C etc est équivalent à -C /etc. C'est souvent le cas avec les
invocations récursives de make.
- -d
-
Afficher les informations de débogage en plus du traitement normal. Les
informations de débogage indiquent quels fichiers sont susceptibles d'être
reconstruits, quelles dates de fichiers sont comparées et avec quel
résultat, quels fichiers doivent être effectivement reconstruits, quelles
règles implicites sont susceptibles d'être mises en jeu et lesquelles seront
appliquées — en un mot tout ce qui explique comment make décide ce qu'il
doit faire.
- --debug[=DRAPEAUX]
-
Afficher des informations de débogage en plus du traitement normal. Si
DRAPEAUX est omis, l'effet de cette option est identique à celui de
l'option -d. DRAPEAUX peut prendre les valeurs suivantes : a pour
afficher toutes les informations de débogage (identique à -d), b pour
un débogage basique, v pour un débogage basique plus explicite, i pour
afficher les règles implicites, j pour des détails sur l'invocation des
commandes et m pour un débogage lors de la reconstruction des
makefile. Utiliser n pour désactiver tous les drapeaux de débogage en
cours.
- -e, --environment-overrides
-
Donner la priorité aux variables d'environnement par rapport aux variables
contenues dans les makefile.
- -f fichier, --file=fichier, --makefile=fichier
-
Utiliser fichier comme makefile.
- -i, --ignore-errors
-
Ignorer toutes les erreurs provoquées par les commandes exécutées pour
reconstruire les fichiers.
- -I répertoire, --include-dir=répertoire
-
Spécifier un répertoire pour rechercher des makefile inclus. Si plusieurs
options -I sont utilisées pour spécifier plusieurs répertoires, la
recherche s'effectue dans ces répertoires selon l'ordre dans lequel ils sont
spécifiés. À la différence des arguments des autres drapeaux de make, les
répertoires spécifiés par le drapeau -I peuvent être placés directement
après le drapeau : -Irépertoire est correct, tout comme
-I répertoire. Cette syntaxe est permise à des fins de compatibilité
avec le drapeau -I du préprocesseur C.
- -j [travaux], --jobs[=travaux]
-
Spécifier le nombre de travaux (commandes) à exécuter simultanément. S'il
y a plusieurs options -j, c'est la dernière qui est prise en compte. Si
l'option -j est spécifiée sans argument, make ne fixera aucune limite
au nombre de travaux pouvant être exécutés simultanément. Lorsque make
invoque sub-make, toutes les instances de make vont se coordonner pour
exécuter le nombre spécifié de travaux à un instant t : voir la section
MAKE PARALLÈLE ET LE SERVEUR DE TRAVAUX pour plus de détails.
- --jobserver-fds [R,W]
-
Option interne que make utilise pour passer aux sub-makes les numéros
de descripteur de fichier de type tube en lecture et écriture du serveur de
travaux ; voir la section MAKE PARALLÈLE ET LE SERVEUR DE TRAVAUX pour
plus de détails.
- -k, --keep-going
-
Continuer autant que possible après une erreur. Alors que la cible qui a
échoué, ainsi que celles qui en dépendent, ne peuvent pas être
reconstruites, les autres dépendances de ces cibles peuvent tout de même
être traitées.
- -l [charge], --load-average[=charge]
-
Empêcher le démarrage de nouveaux travaux (commandes) si d'autres travaux
sont en cours d'exécution et si la charge moyenne est au moins de charge
(un nombre en virgule flottante). Si aucun argument n'est spécifié, une
éventuelle limitation de charge précédemment définie sera annulée.
- -L, --check-symlink-times
-
Utiliser le dernier mtime entre les liens symboliques et la cible.
- -n, --just-print, --dry-run, --recon
-
Afficher les commandes qui seraient exécutées, mais ne pas les exécuter
(sauf dans certaines circonstances).
- -o fichier, --old-file=fichier, --assume-old=fichier
-
Ne pas reconstruire le fichier fichier même s'il est plus ancien que les
fichiers dont il dépend, et ne pas reconstruire ce qui devrait l'être suite
aux modifications de fichier. En gros, le fichier est considéré comme
très ancien et ses règles sont ignorées.
- -O[type], --output-sync[=type]
-
Lorsque plusieurs travaux sont exécutés en parallèle avec -j, s'assurer
que les sorties de chaque travail sont affichées d'un seul bloc, au lieu
d'être intercalées avec les sorties des autres travaux. Si type n'est pas
spécifié ou égal à target, les sorties de l'ensemble du traitement de
chaque cible sont affichées d'un seul bloc. Si type est égal à line,
les sorties de chaque ligne de commande d'une recette sont affichées d'un
seul bloc. Si type est égal à recurse, les sorties de l'ensemble d'un
make récursif sont affichées d'un seul bloc. Enfin, si type est égal à
none, la synchronisation des sorties est désactivée.
- -p, --print-data-base
-
Afficher la base de données (les règles et les valeurs des variables)
générée par l'interprétation des makefile, puis fonctionner de la manière
habituelle ou selon instructions particulières. Afficher aussi les
informations de version telles qu'elles sont fournies avec l'option -v
(voir plus bas). Pour afficher la base de données sans essayer de
reconstruire aucun fichier, utilisez make -p -f/dev/null.
- -q, --question
-
« Mode question ». N'exécuter aucune commande et ne rien afficher ; renvoyer
simplement un code d'état de sortie égal à zéro si les cibles spécifiées
sont déjà à jour ou différent de zéro dans le cas contraire.
- -r, --no-builtin-rules
-
Empêcher l'utilisation des règles implicites intégrées. Effacer aussi la
liste de suffixes par défaut pour les règles de suffixe.
- -R, --no-builtin-variables
-
Ne définir aucune variable intégrée.
- -s, --silent, --quiet
-
Opération silencieuse ; ne pas afficher les commandes à mesure qu'elles sont
exécutées.
- -S, --no-keep-going, --stop
-
Annuler l'effet de l'option -k. Ce n'est jamais nécessaire, sauf dans un
make récursif où -k peut être hérité du make de plus haut niveau à
l'aide de MAKEFLAGS, ou si vous définissez -k dans MAKEFLAGS dans votre
environnement.
- -t, --touch
-
Marquer les fichiers comme modifiés (les marquer comme à jour sans vraiment
les modifier) au lieu d'exécuter leurs commandes. Cette fonctionnalité
permet de prétendre que les commandes ont été exécutées afin de tromper les
futures invocations de make.
- --trace
-
Afficher des informations à propos de la situation de chaque cible (pourquoi
la cible est reconstruite et quelles commandes sont exécutées pour cette
reconstruction).
- -v, --version
-
Afficher la version du programme make plus un copyright, une liste
d'auteurs et un avertissement indiquant qu'il n'y a aucune garantie.
- -w, --print-directory
-
Afficher un message contenant le répertoire de travail avant et après
d'autres traitements. Cela peut s'avérer utile pour rechercher des erreurs
issues d'une imbrication complexe de commandes make récursives.
- --no-print-directory
-
Désactiver -w, même si cette option avait été implicitement activée.
- -W fichier, --what-if=fichier, --new-file=fichier, --assume-new=fichier
-
Prétendre que la cible fichier vient d'être modifiée. Lorsqu'elle est
utilisée avec le drapeau -n, cette option vous permet de voir ce qui se
passerait si vous modifiez ce fichier. Sans -n, cette option produit le
même effet que d'exécuter une commande touch sur le fichier donné avant
d'exécuter make, à la différence que la date de modification n'est
modifiée que dans l'imagination de make.
- --warn-undefined-variables
-
Afficher un avertissement lorsqu'une variable non définie est référencée.
CODE DE RETOUR
GNU Make rend la main avec un état 0 si tous les makefile ont été traités
avec succès et si aucune construction de cible n'a échoué. Un état 1 sera
renvoyé si le drapeau -q a été activé et si make détermine qu'une
cible a besoin d'être reconstruite. Un état 2 sera renvoyé si une erreur
est rencontrée.
VOIR AUSSI
La documentation complète de make est maintenue sous forme de manuel
Texinfo. Si les programmes info et make sont correctement installés
sur votre système, la commande
-
info make
devrait vous donner accès au manuel complet. Le manuel est aussi disponible
en ligne à https://www.gnu.org/software/make/manual/html_node/index.html
MAKE PARALLÈLE ET LE SERVEUR DE TRAVAUX
L'option -j permet à l'utilisateur de demander à make d'exécuter les
tâches en parallèle. Il peut aussi ajouter un argument numérique à -j
pour définir une limite supérieure au nombre de tâches parallèles à
exécuter.
Lorsque l'environnement de compilation fait qu'un make de premier niveau
invoque des sub-makes (par exemple lorsque chaque sous-répertoire possède
son propre Makefile), aucune instance de make ne peut déterminer de
manière isolée combien de tâches s'exécutent en parallèle ; maintenir le
nombre de tâches en dessous d'une certaine limite serait donc impossible
sans une communication entre toutes les instances de make en cours
d'exécution. Des solutions comme faire en sorte que le make de premier
niveau serve de contrôleur central sont envisageables ; on pourrait aussi
utiliser d'autres mécanismes de synchronisation comme la mémoire partagée ou
les sockets ; l'implémentation actuelle utilise cependant un simple tube
partagé.
Ce tube est créé par le processus make de plus haut niveau et passé à
tous les sub-makes. Le processus make de plus haut niveau écrit N-1
jetons d'un octet dans le tube (le processus make de plus haut niveau est
censé réserver un jeton pour lui-même). Chaque fois qu'un des processus
make (y compris celui de plus haut niveau) doit effectuer une nouvelle
tâche, il lit un octet depuis le tube partagé. S'il n'y a plus de jetons à
lire depuis le tube, il doit attendre qu'un jeton y soit écrit. Lorsque sa
tâche est terminée, le processus make écrit un jeton dans le tube
(débloquant ainsi le premier processus make attendant la présence d'un
jeton, dans le cas où il n'en restait plus de disponible). Pas plus de N
tâches ne peuvent être exécutées en même temps, car seulement N-1 jetons
sont écrits dans le tube.
Si le travail à exécuter n'est pas un sub-make, make ferme les
descripteurs de fichier du tube du serveur de travaux avant d'invoquer les
commandes pour que la commande n'interfère pas avec le jobserver et
qu'elle ne trouve pas de descripteurs de fichiers inhabituels.
BOGUES
Voir le chapitre « Problems and Bugs » dans Le manuel de GNU Make.
AUTEUR
Cette page de manuel a été rédigée par Dennis Morse de l'Université de
Stanford. Des mises à jour ultérieures ont été apportées par Mike
Frysinger. Elle a été remaniée par Roland McGrath et est maintenue par Paul
Smith.
COPYRIGHT
Copyright © 1992-1993, 1996-2016 Free Software Foundation, Inc. Ce
fichier fait partie de GNU make.
GNU Make est un logiciel libre ; vous pouvez le redistribuer et/ou le
modifier selon les termes de la GNU General Public License telle qu'elle est
publiée par la Free Software Foundation ; la version 3 de la licence ou
(selon votre choix) toute version ultérieure.
GNU Make est distribué dans l'espoir qu'il sera utile, mais SANS AUCUNE
GARANTIE ; sans même la garantie implicite de QUALITÉ MARCHANDE ou
d'ADÉQUATION À UN USAGE PARTICULIER. Voir la GNU General Public License pour
plus de détails.
Vous devriez avoir reçu une copie de la GNU General Public License avec ce
programme. Dans le cas contraire, voir http://www.gnu.org/licenses/.
TRADUCTION
La traduction française de cette page de manuel a été créée par
Lucien Gentis <lucien.gentis@waika9.com>
Cette traduction est une documentation libre ; veuillez vous reporter à la
GNU General Public License version 3
concernant les conditions de copie et
de distribution. Il n'y a aucune RESPONSABILITÉ LÉGALE.
Si vous découvrez un bogue dans la traduction de cette page de manuel,
veuillez envoyer un message à
Index
- NOM
-
- SYNOPSIS
-
- DESCRIPTION
-
- OPTIONS
-
- CODE DE RETOUR
-
- VOIR AUSSI
-
- MAKE PARALLÈLE ET LE SERVEUR DE TRAVAUX
-
- BOGUES
-
- AUTEUR
-
- COPYRIGHT
-
- TRADUCTION
-
This document was created by
man2html,
using the manual pages.
Time: 05:05:55 GMT, September 19, 2025