L'instruction de compilation
<COMPILE SI> permet de compiler ou non un code WLangage selon une condition.
Cette instruction est notamment utilisée pour obtenir simplement un code multi-configuration, sans affichage d'erreurs de compilation (utilisation des mots-clés Configuration et TypeConfiguration).
Différence entre <COMPILE SI> et l'utilisation du code-cible conditionnel :
- Le code-cible conditionnel compile le code.
Le code-cible conditionnel est intéressant par exemple pour un composant qui s'exécutera sur des plateformes différentes. Le code est compilé dans toutes les plateformes et il s'exécutera selon la plateforme en cours. Pour plus de détails, consultez Code-cible conditionnel. - La compilation conditionnelle (instruction <COMPILE SI>) ne compile pas le code. Elle permet notamment d'éviter l'affichage des erreurs de compilation (utilisation des mots-clés Configuration et TypeConfiguration). Pour plus de détails, consultez le paragraphe Avantages et limitations.
<COMPILE SI Configuration <> "Archive Java">
Trace("Pas Archive Java")
<FIN>
<COMPILE SI Configuration <> "Archive Java" ET Configuration = "Exécutable Windows 32 bits">
Trace("Pas Archive Java et Exe32")
<FIN>
<COMPILE SI Configuration = "Linux64" OU TypeConfiguration = Android>
Trace("Linux64")
i est un entier = 12
<SINON>
Trace("Autres")
i est une chaîne = 24
<FIN>
Trace("i = " + i)
// Déclaration d'une constante ayant une valeur dépendante de la configuration
<COMPILE SI Configuration <> "Archive Java">
CONSTANTE
Nom_Constante = 10
FIN
<SINON>
CONSTANTE
Nom_Constante = 20
FIN
<FIN>
Syntaxe
Compilation en fonction d'une condition
<COMPILE SI <Condition>>
... // Code compilé si la condition est vraie
<FIN>
Compilation d'un code ou d'un autre en fonction d'une condition
<COMPILE SI <Condition>>
... // Code compilé si la condition est vraie
<SINON>
... // Code compilé si la condition est fausse
<FIN>
Compilation d'un code ou d'un autre en fonction de plusieurs conditions
<COMPILE SI <Condition1>>
... // Code compilé si la condition <Condition1> est vraie
<SINON SI <Condition2>>
... // Code compilé si la condition <Condition2> est vraie
...
<SINON SI <ConditionN>>
... // Code compilé si la condition <ConditionN> est vraie
<FIN>
Compilation d'un code ou d'un autre en fonction de plusieurs conditions
<COMPILE SI <Condition1>>
... // code compilé si la condition <Condition1> est vraie
<SINON SI <Condition2>>
... // Code compilé si la condition <Condition2> est vraie
...
<SINON SI <ConditionN>>
... // Code compilé si la condition <ConditionN> est vraie
<SINON>
... // Code compilé si toutes les conditions sont fausses
<FIN>
Compilation d'un code selon le type de chaînes utilisées
<COMPILE SI ConfigurationANSI/ConfigurationUNICODE>
... // code compilé si la configuration en cours utilise des chaînes ANSI ou des chaînes UNICODE
<FIN>
Compilation d'un code selon le type de configuration utilisée (32 ou 64 bits)
<COMPILE SI Configuration32/Configuration64>
... // code compilé si la configuration en cours est une configuration 32 bits ou 64 bits
<FIN>
Remarques
Paramètre Condition
La condition doit être évaluable à la compilation : elle peut donc contenir uniquement des éléments littéraux (nombres, chaînes, Vrai, Faux, ...) ou des constantes.
Remarques :
- Il n'est pas possible d'utiliser une fonction dans la condition.
- La condition peut utiliser des opérateurs de comparaison.
- Des mots-clés spécifiques peuvent être utilisés : Configuration et TypeConfiguration.
Mot-clé Configuration
Le mot-clé
Configuration renvoie le nom de la configuration en cours. Il est donc possible d'écrire :
<COMPILE SI Configuration = "ConfigTest">
// Code compilé dans la configuration "ConfigTest"
<FIN>
Mot-clé TypeConfiguration
Le mot-clé
TypeConfiguration renvoie le type de la configuration en cours. Il est donc possible d'écrire :
<COMPILE SI TypeConfiguration=ApplicationWindows>
// Code compilé dans toutes les configurations Windows
<FIN>
Les types de configuration disponibles sont :
- ApplicationWindows
- ApplicationWindows32
- ApplicationWindows64
- Site
- Bibliothèque
- ComposantExterne
- Webservice
- AssemblageDotNet
- ApplicationDotNet
- Java
- ApplicationLinux
- ApplicationLinux32
- ApplicationLinux64
- PatternRAD
- ServiceWindows
- ServiceWindows32
- ServiceWindows64
- ServiceLinux
- ServiceLinux32
- ServiceLinux64
- Android
- PlanAction
- iOS
- MacOSX
- UniversalWindowsApp
- WindowsMobile
Compilations selon le type des chaînes utilisées (UNICODE ou ANSI)
La syntaxe utilisant les mots-clés ConfigurationANSI et ConfigurationUNICODE permet de compiler un code en fonction du type de chaînes utilisé. Ce paramètre est défini dans la fenêtre de description de la configuration en cours (onglet "Unicode").
Avantages et limitations
Si les conditions précisées dans <COMPILE SI> ne sont pas remplies, le code WLangage n'est pas compilé. Le code non compilé est affiché en gris sous l'éditeur de code, avec une mise en forme minimale.
Avantages :
- Il n'y a pas d'erreur de compilation : les subtilités propres à chaque plateforme (Android, iOS) peuvent être codées sans provoquer d'erreur de compilation dans les autres configurations.
- Il est possible de déclarer la même variable dans deux parties d'une condition de compilation avec des types différents.
Limitations : Dans le code non compilé :
- il n'y a aucune assistance à la saisie du code.
- il n'y a pas de références croisées : pas de Shift+F2, les utilisations des éléments ne sont pas vues, les éléments peuvent apparaître dans les listes des éléments orphelins et du code mort.
- il n'y a pas d'analyse du code : pas de renommage intelligent.
- il n'y a pas d'erreur de compilation : si on modifie le prototype d'une procédure, l'erreur ne sera affichée que lors du passage dans une configuration qui autorise la compilation du code.