Scroll to navigation

MAKEDEPEND(1) General Commands Manual MAKEDEPEND(1)

NOM

makedepend - Créer les dépendances dans les fichiers makefile

SYNOPSIS

makedepend [ -Dname=def ] [ -Dname ] [ -Iincludedir ] [ -Yincludedir ] [ -a ] [ -fmakefile ] [ -include file ] [ -oobjsuffix ] [ -pobjprefix ] [ -sstring ] [ -wwidth ] [ -v ] [ -m ] [ -- otheroptions -- ] sourcefile ...

DESCRIPTION

Le programme makedepend lit chaque fichier source à la file et les analyse comme un préprocesseur C, traitant toutes les instructions #include, #define, #undef, #ifdef, #ifndef, #endif, #if, #elif et #else de telle façon qu'il peut correctement dire quelles instructions #include peuvent être utilisées lors d'une compilation. Chaque instruction #include, peut référencer des fichiers ayant d'autres instructions #include et l'analyse se produira aussi dans ces fichiers.

Tout fichier qui inclut un fichier source, directement ou indirectement, est ce que makedepend appelle une dépendance. Ces dépendances sont ensuite écrites dans un fichier makefile de telle façon que make(1) connaîtra quel fichier d'exécution doit être recompilé quand une dépendance a changé.

Par défaut, makedepend les place en sortie dans un fichier nommé makefile s'il existe, sinon Makefile. Un makefile alternatif peut être spécifié avec l'option -f. Il cherche d'abord dans le makefile la ligne

# DO NOT DELETE THIS LINE -- make depend depends on it.

ou une fournie par l'option -s, comme une limite pour la sortie de dépendances. S'il la trouve, il supprimera tout ce qui suit jusqu'à la fin du fichier makefile et mettra la sortie après cette ligne. S'il ne la trouve pas, le programme joindra la chaîne de caractères à la fin du makefile et placera la sortie après. Pour chaque fichier source apparaissant sur la ligne de commande, makedepend place les lignes dans le makefile de la forme


sourcefile.o: dfile ...

sourcefile.o est le nom de la ligne de commande avec son suffixe remplacé par « .o », et dfile est une dépendance trouvée dans une instruction #include pendant l'analyse des fichiers sources ou un des fichiers qu'il inclut.

EXEMPLE

Normalement, makedepend sera utilisé dans un fichier makefile cible. Donc la commande « make depend » apportera les nouvelles dépendances pour le makefile. Par exemple,


SRCS = file1.c file2.c ...
CFLAGS = -O -DHACK -I../foobar -xyz
depend:
makedepend -- $(CFLAGS) -- $(SRCS)

OPTIONS

Le programme ignorera toute option qu'il ne comprend pas. Donc, vous pouvez utiliser les mêmes arguments que vous utilisez pour cc(1).

Definir. Ceci place une définition pour le nom dans la table de symboles de makedepend. Sans =def le symbole est définit par « 1 ».
Inclure un répertoire. Cette option indique au makedepend d'ajouter includedir à sa liste de répertoires pour chercher quand elle rencontre une instruction #include. Par defaut, makedepend recherche seulement les répertoires standard inclus (habituellement /usr/include et possiblement un répertoire dépendant du compilateur.
Remplace tous les répertoires standard inclus par le seul répertoire inclus spécifié ; vous pouvez omettre le includedir simplement pour éviter la recherche des répertoires standard inclus.
Joint les dépendances à la fin du fichier au lieu de les remplacer.
Nom de fichier. Ceci vous permet de spécifier un fichier makefile alternatif dans lequel makedepend peut placer sa sortie. Specifier « - » comme nom de fichier (i.e., -f-) envoie la sortie à la sortie standard au lieu de modifier un fichier existant.
Traite le fichier comme entrée, et inclut toutes les sorties résultantes avant de traiter le fichier d'entrée courant. Ceci a le même effet que si le fichier spécifié est une déclaration de include qui apparaît avant la toute première ligne de fichier d'entrée régulier.
Suffixe de fichier d'exécution. Certains systèmes peuvent avoir des fichiers objets dont le suffixe est différent de « .o ». Cette option permet de specifier un autre suffixe, comme « .b » avec -o.b ou « :obj » avec -o:obj et ainsi de suite.
Prefixe de fichier d'exécution. Le prefixe est ajouté au début du nom du fichier d'exécution. Ceci est habituellement utilisé pour indiquer un dossier différent pour le fichier d'execution. Par défaut, la chaîne de caractères vide.
Commencer le délimiteur de chaîne de caractères. Cette option vous permet de spécifier une chaîne de caractères pour makedepend pour le chercher dans le makefile.
Largeur de ligne. Normalement, makedepend s'assurera que chaque ligne de sortie qu'il écrit ne dépasse pas 78 caractères pour la lisibilité. Cette option vous permet de changer cette largeur.
Opération bavarde. Cette option fait émettre par makedepend la liste des fichiers inclus par chaque fichier d'entrée.
Avertissement sur l'inclusion multiple. Cette option fait produire par makedepend un avertissement si un fichier d'entrée inclut un autre fichier plus d'une fois. Dans les versions précédentes de makedepend c'était le comportement par défaut ; la valeur par défaut a été changée pour égaler le comportement du compilateur C, qui ne considère pas l'inclusion multiple comme une erreur. Cette option est fournie pour assurer la compatibilité avec les versions antérieures, pour aider aux problèmes de debogage liés à l'inclusion multiple.
Si makedepend rencontre un double trait d'union (--) dans la liste d'arguments, tout argument non reconnu qui le suit sera silencieusement ignoré ; un second double trait d'union termine ce traitement spécial. Dans ce cas, makedepend peut être utilisé pour ignorer surement les arguments ésotériques du compilateur qui pourraient être normalement trouvés dans un CFLAGS font la macro (voir la EXEMPLE section ci-dessus). Toutes les options que makedepend reconnaît et qui apparaissent entre la paire de doubles traits d'union sont traitées normalement.

ALGORITHME

L'approche utlisée dans ce programme lui permet d'exécuter un ordre de grandeur plus rapidement que n'importe quel autre « générateur de dépendance » que j'ai jamais vu. Au coeur de cette performance il y a deux suppositions : tous les fichiers compilés par un seul fichier makefile seront compilés à peu près pareil avec les options -I et -D; et la plupart des fichiers dans un seul dossier incluront largement les mêmes fichiers.

Avec ces suppositions, makedepend s'attend à être appelé une fois pour chaque makefile, avec tous les fichiers sources qui sont maintenus par le makefile qui apparaissent dans la ligne de commandes. Il analyse chaque source et inclut les fichiers exactement une fois, maintenant une table de symboles interne pour chaque source. Ainsi, le premier fichier de la ligne de commandes prendra un laps de temps proportionnel au temps que prend un préprocesseur C. Mais sur les dossiers suivants, s'il rencontre un fichier inclus qu'il a déjà analysé, il ne le réanalyse pas.

Par exemple, imaginez que vous compilez deux fichiers, file1.c et file2.c, ils incluent chacun le fichier en-tête header.h, et le fichier header.h inclus alternativement les fichiers def1.h et def2.h. Quand vous exécutez la commande


makedepend file1.c file2.c

makedepend analysera file1.c et en conséquence, header.h et après def1.h et def2.h. Il décide ensuite que les dépendences pour ces fichiers sont


file1.o: header.h def1.h def2.h

Mais quand le programme analyse file2.c et découvre qu'il inclut aussi header.h, il n'analyse pas le fichier, mais ajoute simplement header.h, def1.h et def2.h à la liste de dépendances pour file2.o.

BOGUES

makedepend analyse, mais n'évalue pas, le SVR4 # l'expression du préprocesseur de predicat(token-liste); on considère simplement que de telles expressions sont vraies. Ceci peut entraîner l'évaluation de la mauvaise instruction #include.

Imaginez que vous analysiez deux fichiers, disons file1.c et file2.c, chacun incluant le fichier def.h. La liste de fichiers que def.h inclut peut vraiment être différente quand def.h est inclus par file1.c et quand il est inclus par file2.c. Mais une fois que makedepend arrive à la liste de dépendances pour un fichier, il est moulé en béton.

AUTHEUR

Todd Brunhoff, Tektronix, Inc. and MIT Project Athena

VOIR AUSSI

cc(1), make(1)

TRADUCTION

Ce document est une traduction, réalisée par Clarisse Ducoux le 26 avril 2007.

L'équipe de traduction a fait le maximum pour réaliser une adaptation française de qualité.

La version anglaise la plus à jour de ce document est toujours consultable via la commande : LANGUAGE=en man makedepend

N'hésitez pas à signaler à l'auteur ou au traducteur, selon le cas, toute erreur dans cette page de manuel.

makedepend 1.0.0 4th Berkeley Distribution