Précédent | Sommaire | Suivant

5.4 Compilation conditionnelle

Le 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 man strftime.

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 !undef

gflag

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 !ifdef

gflag [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 !ifndef

gflag [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 !ifmacrodef

gflag [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 !ifmacrondef

gflag [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 !endif

Cette commande ferme un block débuté par !if, !ifdef, !ifndef, !ifmacrodef ou !ifmacrondef.

5.4.10 !insertmacro

nom_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 !macro

nom_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 !macroend

Termine une macro démarrée par !macro.

Précédent | Sommaire | Suivant


A propos | Contacts | Publicité | Info légales | © Todae 2006-2008

Sites partenaires : discount | avis rémunérés| sorties DVD | Winamp