Directives MAKE
Remonter à MAKE.EXE
Les directives de MAKE ressemblent aux directives des langages tels que Pascal et C. Dans MAKE, elles effectuent diverses opérations de contrôle, telles que l'affichage des commandes avant leur exécution. Les directives de MAKE commencent par un point ou par un point d'exclamation, et remplacent les options données sur la ligne de commande. Les directives qui commencent par un point d'exclamation doivent apparaître au début d'une nouvelle ligne.
Sommaire
Directives MAKE Directives et leurs options de ligne de commande
Le tableau suivant donne la liste des directives de MAKE et leur options en ligne de commande correspondantes :
Directive | Option (si disponible) | Description/Exemple |
---|---|---|
|
|
Active le contrôle de l'auto-dépendance..
Les auto-dépendances sont les fichiers automatiquement inclus dans les cibles que vous construisez, comme les fichiers en-tête inclus dans votre code source C++. Si |
|
|
Active l'auto-dépendance en mémoire cache |
|
Utilisez | |
|
Equivalent du else if de C. | |
|
Equivalent du else de C. | |
|
Termine une instruction | |
|
Arrête MAKE et affiche un message d'erreur. La syntaxe de la !error directive est :
MAKE s'interrompt et affiche la chaîne suivante lorsqu'il rencontre cette directive : Imbriquez !if !$d(MYMACRO) #si MYMACRO n'est pas définie !error MYMACRO n'est pas définie ! endif Si
Contrôles d'erreur MAKE offre quatre contrôles d'erreur différents contrôles :
| |
|
Commence une instruction conditionnelle. | |
|
Equivalent du | |
|
Equivalent du | |
|
|
MAKE ignore la valeur de retour d'une commande. |
|
Cette directive est semblable à la directive
Vous pouvez délimiter le nom du fichier avec des guillemets Cependant, l'écriture de directives Les règles, les commandes ou les directives doivent être terminées dans un fichier source unique ; vous ne pouvez pas démarrer une commande dans un fichier | |
|
|
Conserve les fichiers temporaires créés par MAKE (MAKE les supprime habituellement). |
|
Envoie un message vers stdout pendant que MAKE exécute le fichier make. La directive !message La macro est définie comme : $(MacroName) Lorsque MAKE interprète cette ligne, il affiche à l'écran (en supposant que la macro s'exprime en .CPP) :
| |
|
|
Désactive le contrôle de l'auto-dépendance. |
|
|
Désactive l'auto-dépendance en mémoire cache. |
|
|
Désactive .Ignore. |
|
|
Ne conserve pas les fichiers temporaires créés par MAKE. |
|
|
Affiche les commandes avant que MAKE ne les exécute. |
|
|
Indique à MAKE de ne pas sortir de la mémoire avant d'exécuter une commande. |
|
Indique à MAKE de rechercher les fichiers avec l'extension Pour indiquer à MAKE que les fichiers
| |
|
Enregistre les cibles même si la construction échoue. Si une construction de MAKE échoue, le fichier cible est supprimé. La directive
| |
|
|
MAKE exécute les commandes sans les afficher en premier. |
|
Définit la règle implicite pour les dépendances ambiguës.
La directive
où Par exemple, vous pouvez inclure la ligne
L'exemple suivant de .suffixes: .asm .c .cpp myprog.exe: myprog.obj bcc32 myprog.obj .cpp.obj: bcc32 -P -c $< .asm.obj: tasm /mx $ .c.obj: bcc32 -P- -c $< | |
|
|
Indique à MAKE de sortir de la mémoire avant d'exécuter une commande. |
|
Efface la définition d'une macro. Après cela, la macro n'est pas définie.
La directive
|
Utilisation de macros dans les directives
La macro $d est utilisée avec la directive conditionnelle !if pour effectuer certains traitements si une macro spécifique est définie. $d est suivie d'un nom de macro entre parenthèses ou entre accolades, comme dans l'exemple ci-dessous :
!if $d(DEBUG) #If DEBUG is defined, bcc32 -v f1.cpp f2.cpp #compile with debug information; !else #otherwise bcc32 -v- f1.cpp f2.cpp #don't include debug information. !endif
Macros Null
Tandis qu'un nom de macro non définie détérmine un test
!ifdef MacroName
à renvoyer false
, MacroName
défini comme null va renvoyer true
. Vous définissez une macro null en plaçant après le signe =
, dans la définition de la macro, soit des espaces, soit un caractère de passage. Par exemple, la ligne suivante définit une macro null d'un fichier make :
NULLMACRO =
La ligne suivante définit une macro vide sur la ligne de commande de MAKE :
NULLMACRO ="" -DNULLMACRO
!if et autres directives conditionnelles
La directive !if
fonctionne de la même manière que l'instruction if
du C. Comme illustré ci-dessous, la syntaxe de !if
et des autres directives conditionnelles ressemble à celle des instructions conditionnelles du compilateur :
|
|
|
|
|
|
|
|
|
|
Les expressions suivantes sont équivalentes :
!ifdef macro /* is equivalent to */ !if $d(macro) ifndef macro /* is equivalent to */ !if !$d(macro)
Ces règles s'appliquent aux directives conditionnelles :
- Une directive
!else
est autorisée entre les directives!if
,!ifdef
ou!ifndef
et!endif
. - Plusieurs directives
!elif
sont autorisées entre les directives!if
,!ifdef
ou!ifndef
,!else
et!endif
. - Vous ne pouvez pas répartir de règles entre plusieurs directives conditionnelles.
- Vous pouvez imbriquer les directives conditionnelles.
!if
,!ifdef
, et!ifndef
doivent correspondre à des directives!endif
dans le même fichier.
Les informations suivantes peuvent être insérées entre les directives !if
et !endif
:
- Définition de macro
- Règle explicite
- Règle implicite
- Directive include
- Directive !error
- Directive !undef
Dans une instruction if
, l'expression conditionnelle consiste en une constante décimale, octale ou hexadécimale suivie des opérateurs du tableau suivant :
Opérateur | Description | Opérateur | Description |
---|---|---|---|
|
Négation |
|
Expression conditionnelle |
|
Complément de bit |
|
NOT logique |
|
Addition |
|
Décalage à droite |
|
Soustraction |
|
Décalage à gauche |
|
Multiplication |
|
AND bit-à-bit |
|
Division |
|
OR bit-à-bit |
|
Reste |
|
XOR bit-à-bit |
|
AND logique |
|
Supérieur ou égal à * |
|
OR logique |
|
Inférieur ou égal à * |
|
Supérieur à |
|
Egalité * |
|
Inférieur à |
|
Inégalité * |
L'opérateur marquée avec le signe * fonctionne également avec les expressions de type chaîne.
MAKE évalue une expression conditionnelle comme un entier signé 32 bits ou une chaîne de caractères.