MAKE.EXE

De RAD Studio
Aller à : navigation, rechercher

Remonter à Utilitaires de ligne de commande - Index

MAKE.EXE est un utilitaire de ligne de commande qui vous aide à gérer les cycles de compilation et de liaison des projets. MAKE n'est pas uniquement consacré à la compilation et à la liaison, c'est un outil plus généraliste d'exécution de commandes basées sur les dépendances des fichiers. MAKE vous aide à construire rapidement les projets en compilant uniquement les fichiers modifiés depuis la dernière compilation. De plus, vous pouvez définir les règles spécifiant comment doit agir MAKE dans certaines circonstances spéciales au cours de vos constructions.

Bases de MAKE

MAKE utilise les règles que vous écrivez en plus de ses paramètres par défaut pour déterminer comment il doit compiler les fichiers de votre projet. Par exemple, vous pouvez spécifier à quel moment construire vos projets avec les informations de débogage et compiler vos fichiers .OBJ uniquement si les mentions date/heure du fichier source sont plus récentes que celles du fichier .OBJ lui-même. Si vous avez besoin d'imposer la compilation d'un module, utilisez TOUCH.EXE pour modifier l'horodatage d'un des fichiers dépendant du module.

Dans un fichier ASCII makefile, écrivez les règles explicites et implicites indiquant à MAKE comment traiter les fichiers de votre projet ; MAKE déterminera s'il applique une commande à un fichier ou à un ensemble de fichiers d'après les règles que vous définissez. Bien que vos commandes indiqueront habituellement à MAKE de compiler ou de lier un ensemble de fichiers, vous pouvez spécifier presque n'importe quelle commande du système d'exploitation avec MAKE.

Syntaxe de la ligne de commande

MAKE [<options>...] [<target>[<target>]]

Vous devez séparer la commande MAKE et les arguments options et target par des espaces.

Lorsque vous spécifiez des cibles, vous pouvez utiliser des caractères génériques (comme * et ?) pour indiquer plusieurs fichiers.


Eléments de la ligne de commande

Elément Description
<options>

Les options MAKE qui contrôlent le fonctionnement de MAKE. Voir la section "Options de la commande Make" de cette rubrique.

<target>

Le nom de la cible répertoriée dans le makefile que vous souhaitez construire.


Pour afficher l'aide de la ligne de commande, entrez :

make -?

ou :

make -h

Options de la ligne de commande

Vous pouvez utiliser des options de ligne de commande pour déterminer le comportement de MAKE. Les options de MAKE sont sensibles à la casse des caractères et doivent être précédées d'un tiret - ou d'une barre oblique /.

Vous devez séparer la commande MAKE et les arguments options et target par des espaces. Lorsque vous spécifiez des cibles, vous pouvez utiliser des caractères génériques (comme * et ?) pour indiquer plusieurs fichiers.

De nombreuses options de la ligne de commande correspondent à des directives que vous pouvez utiliser dans le makefile.

MAKE.EXE supporte les options de ligne de commande listées dans le tableau suivant :

Options de la ligne de commande MAKE

Option Description

-h ou -?

Affiche l'aide de la ligne de commande des options MAKE. Les paramètres par défaut sont suivis d'un signe plus.

-a

Vérifie les dépendances des fichiers d'inclusion, et les fichiers d'inclusion imbriqués associés aux fichiers .OBJ, et met à jour le fichier .OBJ si le fichier .h a changé. Voir aussi -c.

-B

Construit toutes les cibles quelle que soit la date des fichiers.

-c

Met en cache les informations d'autodépendance, ce qui peut améliorer la vitesse de MAKE. Utilisez avec -a. N'utilisez pas cette option si MAKE modifie les fichiers d'inclusion (ce qui peut se produire si vous employez TOUCH dans le makefile ou si vous créez des fichiers d'en-tête ou d'inclusion au cours du processus MAKE).

-D<macro>

Définit macro par un caractère unique, ce qui fait renvoyer true à une expression !ifdef macro écrite dans le makefile.

[-D]<macro>=[<string>]

Définit <macro> par <string>. Si <string> contient des espaces ou des tabulations, entourez <string> avec des guillemets. -D et <string> sont facultatifs.

-d<directory>

Spécifie l'unité et le répertoire utilisé par MAKER (version en mode réel de MAKE) lorsqu'il transfère les données hors de la mémoire lors du swapping. Cette option doit être utilisée avec -S. MAKE ignore cette option.

-e

Ignore une macro si son nom est celui d'une variable d'environnement. MAKE utilise la variable d'environnement à la place de la macro.

-f<filename>

Utilise <filename> ou <filename>.MAK à la place de MAKEFILE (un espace après -f est facultatif).

-I<directory>

Recherche les fichiers d'inclusion d'abord dans le répertoire en cours, puis dans le répertoire spécifié.

-i

Ignore le statut de sortie de tous les programmes exécutés depuis le makefile et poursuit le processus de construction.

-K

Conserve les fichiers temporaires créés par MAKE (MAKE les supprime généralement).

-m

Affiche l'horodatage de chaque fichier lors de son traitement par MAKE.

-n

Imprime les commandes MAKE mais ne les exécute pas. Cela sert au débogage des makefiles.

-N

MAKE imite NMAKE de Microsoft.

-p

Affiche toutes les définitions de macros et les règles implicites avant d'exécuter le makefile.

-q

Renvoie 0 si la cible est à jour et une valeur non nulle si elle ne l'est pas (pour une utilisation avec des fichiers batch).

-r

Ignore toutes les règles définies dans BUILTINS.MAK. Voir la section BUILTINS.MAK de cette rubrique.

-s

Supprime l'affichage des commandes à l'écran (mode silencieux).

-S

Transfère MAKER hors de la mémoire pendant l'exécution des commandes afin de réduire la charge mémoire et permettre la compilation des modules volumineux. MAKE ignore cette option.

-U<macro>

Annule la définition de macro précédente de <macro>.

-W<filename>

Ecrit MAKE dans le fichier <filename>, en mettant à jour toutes les options qui ne sont pas des chaînes.


Par exemple, pour utiliser un fichier nommé PROJECTA.MAK comme makefile, tapez :

MAKE -fPROJECTA.MAK

Actions MAKE par défaut

Lorsque vous émettez une commande MAKE, MAKE recherche BUILTINS.MAK, un fichier que vous créez pour contenir les règles par défaut de MAKE (utilisez l'option -r pour ignorer les règles par défaut). MAKE recherche ce fichier d'abord dans le répertoire en cours puis dans le répertoire où est stocké MAKE.EXE. Après le chargement de BUILTINS.MAK, MAKE recherche dans le répertoire en cours un fichier nommé MAKEFILE ou MAKEFILE.MAK (utilisez l'option -f pour spécifier un autre fichier que MAKEFILE). Si MAKE ne trouve pas le makefile, il génère un message d'erreur.

Après le chargement du makefile, MAKE essaie de construire seulement la première cible explicite listée dans le makefile en vérifiant la date et l'heure des fichiers dépendants de la première cible. Si les fichiers dépendants sont plus récents que le fichier cible, MAKE exécute les commandes pour mettre à jour la cible.

Si l'un des fichiers dépendants de la première cible est utilisé comme cible ailleurs dans le makefile, MAKE vérifie les dépendances de cette cible et la construit avant de construire la première cible. Cette réaction en chaîne est appelée une dépendance liée.

Si une phase du processus de construction échoue, MAKE supprime le fichier cible qu'il était en train de construire. Utilisez la directive .precious si vous voulez que MAKE conserve la cible après l'échec de la construction.

Vous pouvez interrompre MAKE après l'émission de la commande MAKE en utilisant CTRL+Break ou CTRL+C.

A propos des makefiles

Un makefile est un fichier ASCII contenant l'ensemble des instructions utilisées par MAKE pour construire un certain projet. Bien que MAKE suppose que votre makefile s'appelle MAKEFILE ou MAKEFILE.MAK, vous pouvez spécifier un autre nom de makefile avec l'option -f.

MAKE construit les cibles spécifiées avec la commande make ou il construit la première cible trouvée dans le makefile. Pour construire plus d'une cible, utilisez une cible symbolique dans votre makefile.

Les makefiles peuvent contenir les éléments suivants :

  • Commentaires (précédés du signe dièse #)
  • Règles explicites et implicites
  • Macros
  • Directives

Cibles symboliques

Une cible symbolique force MAKE à construire plusieurs cibles dans un makefile. Lorsque vous spécifiez une cible symbolique, la ligne des dépendances liste toutes les cibles que vous souhaitez construire (une cible symbolique utilise les dépendances liées pour construire plus d'une cible). Voir les "dépendances liées" à la section Actions MAKE par défaut de cette rubrique.

Par exemple, le makefile suivant utilise la cible symbolique AllFiles pour construire à la fois FILE1.EXE et FILE2.EXE :

AllFiles: file1.exe file2.exe  #Note that AllFiles has no commands
file1.exe: file1.obj
  bcc32 file1.obj
file2.exe: file2.obj
  bcc32 file2.obj

Règles pour les cibles symboliques

Observez les règles suivantes lorsque vous utilisez des cibles symboliques :

  • Ne tapez pas de ligne de commandes après la ligne de la cible symbolique.
  • Une cible symbolique doit avoir un nom unique ; ce ne peut être le nom d'un fichier de votre répertoire en cours.
  • Les noms des cibles symboliques doivent respecter les règles du système d'exploitation relatives aux noms de fichiers.

BUILTINS.MAK

Vous pouvez créer le fichier facultatif BUILTINS.MAK et y stocker les règles standard et les macros que MAKE utilise lorsqu'il construit les cibles dans un makefile. Pour ignorer ce fichier s'il existe, utilisez l'option -r de MAKE.

Voici un exemple de fichier BUILTINS.MAK :

#
# C++Builder BUILTINS.MAK
#
CC = bcc32
RC = brcc32
AS = tasm32
.asm.obj:
    $(AS) $(AFLAGS) $&.asm
.c.exe:
    $(CC) $(CFLAGS) $&.c
.c.obj:
    $(CC) $(CFLAGS) /c $&.c
.cpp.exe:
    $(CC) $(CFLAGS) $&.cpp
.cpp.obj:
    $(CC) $(CPPFLAGS) /c $&.cpp
.rc.res:
    $(RC) $(RFLAGS) /r $&
.SUFFIXES: .exe .obj .asm .c .res .rc
!if !$d(BCEXAMPLEDIR)
BCEXAMPLEDIR = $(MAKEDIR)\..\EXAMPLES
!endif


Voir aussi