![]() |
|
Précédent | Sommaire | Suivant 5.4 Compilation conditionnelleLe compilateur stocke une liste de symboles définis, qui peuvent être défini en utilisant !define ou l'option de ligne de commande /D. Ces symboles définis peut être utilisés pour faire de la compilation conditionnelle (en utilisant !ifdef) ou bien pour remplacer des symboles (une simple forme de macros). Pour remplacer un symbole par sa valeur, utilisez ${SYMBOLE} (si SYMBOLE n'est pas défini, aucune translation ne se fera). La translation suit la règle simple du premier-arrivé-premier-servi, ce qui signifie que si vous faites: !define symbole_un ${symbole_deux}
Si symbole_deux est défini lors de la lecture de la ligne, il sera remplacé. Sinon, tout remplacement se fera lorsque ${symbole_un} sera référencé. Commandes relatives aux defines et à la compilation conditionnelle: 5.4.1 !define([/date|/utcdate] gflag [valeur]) | (/math gflag valeur1 OP valeur2) Cette commande va ajouter gflag dans la liste des defines globaux. Ceci aura un effet similaire que l'utilisation de l'option /D en ligne de commande (mais le define ne sera ici effectif qu'après la commande !define). Si /date ou /utcdate sont utilisés, value sera passé dans strftime et le résultat sera utilisé comme la valeur de gflag. strftime converti les symboles spéciaux en certaines parties de la date actuelle ou de l'heure. Par exemple, %H sera converti en l'heure actuelle au format 24 heures. Pour une liste complète des symboles disponibles, cherchez strftime sur MSDN. Sur POSIX, vous pouvez obtenir la liste en utilisant Si /math est utilisé, le résultat de 'valeur1 OP valeur2', ou OP peut être +,-,*,&,|,^,/ ou % , sera utilisé comme la valeur de gflag. Notez que valeur1 ET valeur2 DOIVENT être des entiers! !define USE_SOMETHING
!define VERSION 1.2
!define /date NOW "%H:%M:%S %d %b, %Y"
!define /math RESULT 3 + 10
!define /math REST 15 % ${RESULT}
5.4.2 !undefgflag Enlève un élément de la liste générale des définitions. Notez que ${SYMBOLE} ou SYMBOLE est indéfini sera traduit en "${SYMBOL}". !define SOMETHING !undef SOMETHING 5.4.3 !ifdefgflag [bcheck gflag [...]]] Cette commande, si combinée avec une commande !endif, va indiquer au compilateur de compiler ou pas les lignes entre ces deux lignes. Si gflag est défini en global (en utilisant !define ou l'option /D), alors les lignes contenues seront compilées. Sinon, elles seront ignorées. 'bverif' peut être spécifié comme & (et booléen) ou | (ou booléen) avec plus de gflags -- la vérification se fait de la gauche vers la droite. !define SOMETHING !ifdef SOMETHING !echo "SOMETHING est défini" !endif !undef SOMETHING !ifdef SOMETHING !echo "SOMETHING est défini" # ne sera jamais affiché !endif 5.4.4 !ifndefgflag [bcheck gflag [...]]] Cette commande est l'opposée de !ifdef (si 'gflag' n'est pas défini en global, les lignes contenue seront compilées). 5.4.5 !if[!] valeur [op value2] Cette commande, si utilisée en paire avec une commande !endif, dira au compilateur si il faut ou non compiler les lignes entre ces deux lignes. Si la valeur est non-zéro, ou la comparaison de valeur et valeur2 dépendant des résultats de l'opérateur en true, les lignese contenues seront compilées. Sinon, elles seront passées. op peut être soit == ou != (comparaison de chaine), <=, < > ou >= (comparaison float), && ou || (comparaison de booléen). Si [!] est défini, la valeur de retou sera passée de vrai à faux et vice versa. !if 1 < 2 !echo "1 is smaller than 2!!" !else if ! 3.1 > 1.99 !error "this line should never appear" !else !error "neither should this" !endif 5.4.6 !ifmacrodefgflag [bcheck gflag [...]]] Cette commande, lorsqu'elle est couplée avec une commande !endif, indiquera au compilateur de compiler ou pas les lignes entre ces deux commandes. Si la macro existe, alors les lignes contenues seront compilées. Dans le cas contraire, elles seront sautées. 'bverif' peut être spécifié comme & (et booléen) ou | (ou booléen) avec d'autres gflags -- la vérification se fait de la gauche vers la droite. !macro SomeMacro !macroend !ifmacrodef SomeMacro !echo "SomeMacro est définie" !endif 5.4.7 !ifmacrondefgflag [bcheck gflag [...]]] L'inverse de !ifmacrodef. Les lignes seront compilées si la macro gflag n'existe pas. 5.4.8 !else[if|ifdef|ifndef|ifmacrodef|ifmacrondef [...]] Cette commande permet de facilement insérer des codes différents suivant qu'un define ou une macro est défini ou pas. Vous pouvez créer des blocs comme !ifdef/!else/!endif, !ifdef/!else ifdef/!else/!endif etc. !ifdef VERSION
OutFile installer-${VERSION}.exe
!else
OutFile installer.exe
!endif
5.4.9 !endifCette commande ferme un block débuté par !if, !ifdef, !ifndef, !ifmacrodef ou !ifmacrondef. 5.4.10 !insertmacronom_macro [parametre] [...] Insère le contenu d'une macro créée par !macro. Si la macro a été créée avec des paramètres, alors vous devrez passer autant de paramètres à la macro qu'elle le requiert. !macro Print text
DetailPrint "${text}"
!macroend
!insertmacro Print "du texte"
!insertmacro Print "du texte en plus"
5.4.11 !macronom_macro [parametre][...] Créé une macro nommée 'nom_macro'. Toutes les lignes entre !macro et !macroend seront enregistrées. Pour insérer une macro par la suite, on utilisera !insertmacro. Les définitions de !macro peuvent avoir un ou plusieurs paramètres définis. Les paramètres seront accédés de la même manière que le serait un !define (ex. ${NOMPARAM}) depuis l'intérieur de la macro. !macro SomeMacro parm1 parm2 parm3
DetailPrint "${parm1}"
MessageBox MB_OK "${parm2}"
File "${parm3}"
!macroend
5.4.12 !macroendTermine une macro démarrée par !macro. Précédent | Sommaire | Suivant |
||
|