Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Vous pouvez contrôler la session NMAKE à l’aide de directives et d’expressions de prétraitement. Les instructions de prétraitement peuvent être placées dans le makefile ou dans Tools.ini. À l’aide de directives, vous pouvez traiter de manière conditionnelle votre makefile, afficher des messages d’erreur, inclure d’autres makefiles, annuler la définition d’une macro et activer ou désactiver certaines options.
Directives de prétraitement d'un makefile
Les directives de prétraitement ne respectent pas la casse. Le point d’exclamation initial (!) doit apparaître au début de la ligne. Zéro ou plusieurs espaces ou onglets peuvent apparaître après le point d’exclamation, pour la mise en retrait.
!CMDSWITCHES{ option |-} ...+Active ou désactive chaque option répertoriée. Les espaces ou les onglets doivent apparaître avant l’opérateur ou
-l’opérateur+. Aucun espace ne peut apparaître entre l’opérateur et les lettres d’option. Les lettres ne respectent pas la casse et sont spécifiées sans barre oblique (/). Pour activer certaines options et désactiver d’autres, utilisez des spécifications distinctes de!CMDSWITCHES.Seuls
/D,/I,/Net/Speuvent être utilisés dans un makefile. DansTools.ini, toutes les options sont autorisées, sauf/F,/HELP,/NOLOGO,/Xet/?. Les modifications spécifiées dans un bloc de description ne prennent pas effet tant que le bloc de description suivant n’est pas appliqué. Cette directive met à jourMAKEFLAGS; les modifications sont héritées pendant la récursivité siMAKEFLAGSelle est spécifiée.!ERRORSMSAffiche le texte dans l’erreur U1050, puis arrête NMAKE, même si
/K,/I,.IGNORE,!CMDSWITCHESou le modificateur de commande tiret (-) est utilisé. Espaces ou onglets avant que le texte ne soit ignoré.!MESSAGESMSAffiche du texte en sortie standard. Espaces ou onglets avant que le texte ne soit ignoré.
!INCLUDE[<] filename [>]Lit le nom de fichier en tant que makefile, puis continue avec le makefile actuel. NMAKE recherche d’abord le nom de fichier dans le répertoire spécifié ou actif, puis récursivement via les répertoires de tous les makefiles parents, puis, si le nom de fichier est placé entre crochets (), dans les répertoires
< >spécifiés par laINCLUDEmacro, qui est initialement défini sur laINCLUDEvariable d’environnement. Utile pour passer des.SUFFIXESparamètres,.PRECIOUSet des règles d’inférence aux makefiles récursifs.!IFconstant_expressionTraite les instructions entre
!IFet la suivante!ELSEou!ENDIFsi constant_expression est évaluée à une valeur différente de zéro.!IFDEFmacro_nameTraite les instructions entre
!IFDEFet la suivante!ELSEou!ENDIFsi macro_name est définie. Une macro Null est considérée comme définie.!IFNDEFmacro_nameTraite les instructions entre
!IFNDEFet la suivante!ELSEou!ENDIFsi macro_name n’est pas définie.!ELSE[IFconstant_expression macro_nameIFDEF| macro_name ] |IFNDEFTraite les instructions entre
!ELSEet la suivante!ENDIFsi l’instruction précédente!IF,!IFDEFou!IFNDEFl’instruction a évalué à zéro. Les mots clés facultatifs contrôlent davantage le prétraitement.!ELSEIFSynonyme de
!ELSE IF.!ELSEIFDEFSynonyme de
!ELSE IFDEF.!ELSEIFNDEFSynonyme de
!ELSE IFNDEF.!ENDIFMarque la fin d’un ,
!IFDEFou!IFNDEFd’un!IFbloc. Tout texte après!ENDIFla même ligne est ignoré.!UNDEFmacro_nameUndefines macro_name.
Expressions utilisées dans le prétraitement d’un makefile
L’ou !IF !ELSE IF l’constant_expression se compose de constantes entières (en notation de langage décimal ou C), de constantes de chaîne ou de commandes. Utilisez des parenthèses pour regrouper des expressions. Les expressions utilisent un entier long signé de type C arithmétique ; les nombres sont sous forme de complément 32 bits dans la plage -2147483648 à 2147483647.
Les expressions peuvent utiliser des opérateurs qui agissent sur des valeurs constantes, des codes de sortie à partir de commandes, de chaînes, de macros et de chemins de système de fichiers.
Opérateurs de prétraitement d’un makefile
Les expressions de prétraitement makefile peuvent utiliser des opérateurs qui agissent sur des valeurs constantes, les codes de sortie des commandes, chaînes, macros et chemins d’accès du système de fichiers. Pour évaluer l’expression, le préprocesseur développe d’abord les macros, puis exécute des commandes, puis effectue les opérations. Elle évalue les opérations dans l’ordre de regroupement explicite entre parenthèses, puis dans l’ordre de priorité de l’opérateur. Il en résulte une valeur constante.
L’opérateur DEFINED est un opérateur logique qui agit sur un nom de macro. L’expression DEFINED( macro_name ) a la valeur true si macro_name est définie, même si elle n’a pas de valeur affectée. DEFINED en combinaison avec !IF ou !ELSE IF équivaut à !IFDEF ou !ELSE IFDEF. Toutefois, contrairement à ces directives, DEFINED peuvent être utilisées dans des expressions complexes.
L’opérateur EXIST est un opérateur logique qui agit sur un chemin d’accès au système de fichiers. EXIST( path ) est true si le chemin existe. Le résultat de EXIST peut être utilisé dans des expressions binaires. Si le chemin contient des espaces, placez-le entre guillemets doubles.
Pour comparer deux chaînes, utilisez l’opérateur d’égalité (==) ou l’opérateur d’inégalité (!=). Placez les chaînes entre guillemets doubles.
Les constantes entières peuvent utiliser les opérateurs unaires pour la négation numérique (-), le complément (~) et la négation logique (!).
Les expressions peuvent utiliser les opérateurs suivants. Les opérateurs de même priorité sont regroupés ensemble et les groupes sont répertoriés dans l'ordre de priorité décroissante. Les opérateurs unaires s’associent avec l’opérande de droite. Les opérateurs binaires de même priorité associent les opérandes de gauche à droite.
| Opérateur | Description |
|---|---|
DEFINED( macro_name ) |
Produit une valeur logique pour l’état de définition actuel de macro_name. |
EXIST(chemin ) |
Produit une valeur logique pour l’existence d’un fichier au chemin d’accès. |
! |
NOT logique unaire. |
~ |
Le complément d’un unaire. |
- |
Négation unaire |
* |
Multiplication. |
/ |
Division. |
% |
Modulo (reste) |
+ |
Addition. |
- |
Soustraction. |
<< |
Déplacement à gauche au niveau du bit |
>> |
Déplacement à droite au niveau du bit |
<= |
Inférieur ou égal à. |
>= |
Supérieur ou égal à. |
< |
Inférieur à. |
> |
Supérieur à. |
== |
Égalité |
!= |
Inégalité |
& |
Opérateur AND au niveau du bit. |
^ |
XOR au niveau du bit. |
| |
Opérateur OR au niveau du bit. |
&& |
AND logique. |
|| |
OR logique. |
Remarque
L’opérateur XOR au niveau du bit (^) est identique au caractère d’échappement et doit être échappé (en tant que ^^) lorsqu’il est utilisé dans une expression.
Exécution d’un programme en prétraitement
Pour utiliser le code de sortie d’une commande pendant le prétraitement, spécifiez la commande, avec tous les arguments, entre crochets ([ ]). Toutes les macros sont développées avant l’exécution de la commande. NMAKE remplace la spécification de commande par le code de sortie de la commande, qui peut être utilisé dans une expression pour contrôler le prétraitement.
Exemple
!IF [my_command.exe arg1 arg2] != 0
!MESSAGE my_command.exe failed!
!ENDIF