Prétraitement d’un makefile

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 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 /S peuvent être utilisés dans un makefile. Dans Tools.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 à jour MAKEFLAGS; les modifications sont héritées pendant la récursivité si MAKEFLAGS elle est spécifiée.

  • !ERRORtexte

    Affiche 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é.

  • !MESSAGEtexte

    Affiche 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 la INCLUDE macro, qui est initialement défini sur la INCLUDE variable d’environnement. Utile pour passer des .SUFFIXES paramètres, .PRECIOUSet des règles d’inférence aux makefiles récursifs.

  • !IFconstant_expression

    Traite les instructions entre !IF et la suivante !ELSE ou !ENDIF si constant_expression est évaluée à une valeur différente de zéro.

  • !IFDEFmacro_name

    Traite les instructions entre !IFDEF et la suivante !ELSE ou !ENDIF si macro_name est définie. Une macro Null est considérée comme définie.

  • !IFNDEFmacro_name

    Traite les instructions entre !IFNDEF et la suivante !ELSE ou !ENDIF si macro_name n’est pas définie.

  • !ELSE[ IFconstant_expression macro_nameIFDEF | macro_name ] | IFNDEF

    Traite les instructions entre !ELSE et la suivante !ENDIF si l’instruction précédente !IF, !IFDEFou !IFNDEF l’instruction a évalué à zéro. Les mot clé facultatives permettent de contrôler davantage le prétraitement.

  • !ELSEIF

    Synonyme de !ELSE IF.

  • !ELSEIFDEF

    Synonyme de !ELSE IFDEF.

  • !ELSEIFNDEF

    Synonyme de !ELSE IFNDEF.

  • !ENDIF

    Marque la fin d’un , !IFDEFou !IFNDEF d’un !IFbloc. Tout texte après !ENDIF la même ligne est ignoré.

  • !UNDEFmacro_name

    Undefines macro_name.

Expressions dans le prétraitement makefile

L’ou !IF!ELSE IFconstant_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 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(path) 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

Voir aussi

Référence NMAKE