make — Utilitaire GNU Make pour la maintenance de groupes
de programmes
make [OPTION]... [CIBLE]...
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.
- -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.
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.
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
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.
Voir le chapitre « Problems and Bugs »
dans Le manuel de GNU Make.
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 © 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/.
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 à
debian-l10n-french@lists.debian.org.