Compilation

De RAD Studio
Aller à : navigation, rechercher

Remonter à Compilateur Delphi

Projet > Options > Construction > Compilateur Delphi > Compilation

Utilisez cette page pour définir les options de compilation pour le projet en cours.

Remarque: Les options décrites ici ne sont pas toutes disponibles pour tous les types de projets. Par exemple, Répertoire de sortie DCP n'apparaît pas pour les projets C++.
Options Description

Cible, Appliquer, Enregistrer

Voir Options de la cible.

Eléments communs

Voir Eléments communs des pages Options de projet.

Options de génération du code

Elément Description Commutateurs du compilateur Toutes les plates-formes sont prises en charge sauf spécification contraire

Contrôle du code inline

Définit ou efface la directive du compilateur Delphi {$INLINE <ON|OFF|AUTO>}. Pour de plus amples informations, voir "Utilisation de la directive inline" dans Appel de procédures et de fonctions (Delphi).

Valeur par défaut = désactivé

‑‑inline

Page de code

Entrez la page de code relative à la langue de votre application, par exemple 1252. La page de code est un nombre décimal représentant une table d'encodage de caractères spécifique, avec des valeurs standard pour les diverses langues.

Valeur par défaut = 0

‑‑codepage

Emettre les informations de type à l'exécution

Contrôle la génération des informations de type à l'exécution. La valeur par défaut est False (aucune information de type à l'exécution n'est émise).

Valeur par défaut = False

‑$M+
‑$M‑

Taille d'énumération minimale

Spécifie la plus petite quantité de mémoire à allouer pour une énumération. Les choix possibles sont Octet {$Z1}, Mot {$Z2}, Double mot {$Z4}. Le bouton popup Flèche bas est décrit dans Eléments communs des pages Options de projet.

Valeur par défaut = Octet

‑$Z1
‑$Z2
‑$Z4

Optimisation

Contrôle l'optimisation du code. Quand cette option est activée (équivalent à {$O+}), le compilateur effectue un nombre d'optimisations de code, telles que le placement des variables dans les registres CPU, en éliminant des sous-expressions communes et en générant des variables d'induction. Quand elle est désactivée (équivalent à {$O-}), toutes ces optimisations sont désactivées.

Il ne sera jamais nécessaire de désactiver les optimisations sauf pour certaines situations de débogage. Toutes les optimisations effectuées par le compilateur Delphi n'altéreront pas la signification d'un programme. En d'autres termes, le compilateur n'effectue aucune optimisation "non sécurisée" nécessitant une connaissance spéciale du programmeur. Cette option permet seulement d'activer ou de désactiver l'optimisation pour une procédure ou une fonction toute entière. Vous ne pouvez pas activer ou désactiver l'optimisation pour une seule ligne, ni pour un groupe de lignes au sein d'une routine.

Valeur par défaut = False

‑$O+
‑$O‑

Alignement des champs d'enregistrements

Contrôle l'alignement des champs dans les types enregistrement et les structures de classes Delphi. Cliquez sur la flèche vers le bas pour effectuer une sélection parmi les valeurs possibles :

  • Si vous sélectionnez l'option Désactivé (équivalent à {$A1}) ou désactivez cette option (équivalent à {$A-}), les champs ne sont jamais alignés. Tous les enregistrements et structures de classes sont packed.
  • Si vous sélectionnez Octet (équivalent à {$A2}), les champs des types enregistrement déclarés sans le modificateur packed et les champs des structures classe sont alignés sur les frontières octet.
  • Si vous sélectionnez Mot (équivalent à {$A2}), les champs des types enregistrement déclarés sans le modificateur packed et les champs des structures classe sont alignés sur les frontières mot.
  • Si vous sélectionnez Double mot (équivalent à {$A4}), les champs des types enregistrement déclarés sans le modificateur packed et les champs des structures classe sont alignés sur les frontières double mot.
  • Si vous sélectionnez Quadruple mot (équivalent à {$A8} ou {$A+}), les champs des types enregistrement déclarés sans le modificateur packed et les champs des structures classe sont alignés sur les frontières quadruple mot.

Quel que soit le mode de la directive $A, les variables et constantes typées sont toujours alignées pour un accès optimal. L'exécution est plus rapide si vous définissez l'option sur 8 (Quadruple mot).
C'est la valeur par défaut.

‑$A‑
‑$A1
‑$A2
‑$A4
‑$A8
‑$A+

Cadres de pile

Contrôle la génération des cadres de pile pour les procédures et les fonctions.

Quand cette option est activée (équivalent au mode {$W+}), les cadres de pile sont toujours générés pour les procédures et les fonctions, même s'ils ne sont pas nécessaires.

Quand elle est désactivée (équivalent à {$W-}), les cadres de pile ne sont générés que lorsqu'ils sont nécessaires, selon l'utilisation que fait la routine des variables locales. Certains outils de débogage requièrent la génération de cadres de pile pour toutes les procédures et fonctions, mais d'autres outils ne requièrent pas d'activer cette option.
C'est la valeur par défaut.

‑$W+
‑$W‑

  • Windows 32 bits
  • Windows 64 bits
  • macOS 

Options Débogage

Elément Description Commutateurs du compilateur Toutes les plates-formes sont prises en charge sauf spécification contraire

Assertions

Active ou désactive la génération du code pour les assertions dans un fichier source Delphi. Cette option est activée (équivalent à {$C+}) par défaut. Comme les assertions ne sont pas habituellement utilisées à l'exécution dans les versions commercialisées d'un produit, les directives de compilation désactivant la génération du code pour les assertions sont fournies. Désélectionnez cette option pour désactiver les assertions.

‑$C+
‑$C‑

Informations de débogage

Les informations de débogage se présentent sous la forme de tables de numéros de lignes propres à chaque procédure, qui contiennent les adresses du code correspondant à chaque ligne du texte source. Pour les unités, les informations de débogage sont enregistrées dans le fichier unité, avec le code objet de l'unité. Elles augmentent la taille du fichier unité et l'espace mémoire occupé lors de la compilation des programmes utilisant cette unité, mais n'affectent ni la taille ni la vitesse d'exécution du programme exécutable. Quand un programme ou une unité est compilé avec cette option activée (équivalent à {$D+}), le débogueur intégré vous permet d'exécuter les instructions pas à pas et de définir des points d'arrêt dans ce module.

Les options Placer les informations de débogage dans un fichier TDS distinct et Fichier map (sur la page Liaison du dialogue Options de projet) produisent des informations de ligne complètes pour un module donné seulement si vous avez compilé ce module avec cette option activée. Cette option est généralement utilisée conjointement avec l'option Symboles locaux (commutateur {$L}), qui active et désactive la génération des informations relatives aux symboles locaux pour le débogage.

‑V ‑VN

Symboles locaux

Active ou désactive la génération d'informations relatives aux symboles locaux. Cliquez sur la flèche vers le bas pour sélectionner parmi les valeurs possibles (True, False).

Il s'agit des noms et types de toutes les variables et constantes locales au module, c'est-à-dire tous les symboles de la partie implementation du module (y compris les symboles des procédures et fonctions). Pour les unités, les informations relatives aux symboles locaux sont stockées dans le fichier unité avec le code objet de l'unité. Ces informations augmentent la taille des fichiers unité et l'espace mémoire nécessaire à la compilation des programmes utilisant l'unité. En revanche, elles n'affectent ni la taille ni la vitesse d'exécution du programme exécutable. Quand un programme ou une unité est compilé avec cette option activée (équivalent à {$L+}), le débogueur intégré vous permet d'examiner et de modifier les variables locales du module.

De plus, les appels aux procédures et fonctions du module peuvent être examinés en utilisant Voir > Fenêtres de débogage > Pile d'appels. Les options Placer les informations de débogage dans un fichier TDS distinct et Fichier map (sur la page Liaison du dialogue Options de projet) produisent des informations de symbole local pour un module donné seulement si ce module a été compilé avec cette option activée. Cette option est généralement utilisée conjointement avec l'option Informations de débogage, qui active et désactive la génération des tables de numéros de lignes pour le débogage. Cette option est ignorée si l'option Informations de débogage du compilateur est désactivée.

‑$L+
‑$L‑

Informations de référence des symboles

Génère les informations de référence des symboles utilisées par l'éditeur de code et le Gestionnaire de projets. Correspond à la directive {$Y} du compilateur Delphi.

  • Si l'option Aucune est sélectionnée ({$Y-}), aucune information de référence de symbole n'est enregistrée.
  • Si l'option Définitions uniquement est sélectionnée ({$YD}), le compilateur enregistre les informations sur l'endroit où sont définis les identificateurs.
  • Si l'option Informations de référence est sélectionnée ({$Y+}), le compilateur enregistre les informations sur l'endroit où est défini chaque identificateur et sur l'endroit où il est utilisé.

Cette option n'a d'effet que si Informations de débogage et Symboles locaux (voir plus haut) sont activées.

Les fonctionnalités Achèvement de code et Navigation du code (Ctrl+Click) fonctionnent seulement quand l'option Informations de référence des symboles est définie sur Informations de référence.

‑$Y+
‑$YD
‑$Y‑

Utiliser les .DCU de débogage

Les DCU de débogage contiennent des informations de débogage et sont construits avec les cadres de piles. Quand cette option est cochée, le compilateur ajoute le chemin des DCU de débogage aux chemins de recherche spécifiés dans Sources de débogage sur la page Débogueurs Embarcadero.

Utiliser les références de données importées

Permet aux unités packagées de référencer les variables des autres packages. Equivalent à la directive {$G} du compilateur Delphi.

‑$G+
‑$G‑

  • Windows 32 bits
  • Windows 64 bits
  • macOS 

Autres options

Elément Description Commutateurs du compilateur Toutes les plates-formes sont prises en charge sauf spécification contraire

Autres options à transmettre au compilateur

Entrez les commutateurs du compilateur que vous voulez ajouter aux paramètres contrôlés par les boîtes de dialogue Projet > Options. Utilisez un tiret comme symbole du commutateur, et séparez les commutateurs par des virgules.

Les .DCU des clauses uses sont traités dans l'achèvement de code

L'achèvement de code ( (Ctrl+Espace) est une fonctionnalité de l'audit de code disponible dans l'éditeur de code. Elle vous aide à écrire votre code.

Remarque: Elle fonctionne aussi avec les fichiers .pas et .dcu. Elle peut être désactivée dans Options de projet si vous voulez travailler au niveau de la plate-forme.

Lorsque vous appelez l'achèvement de code depuis une clause uses, deux modes sont disponibles :

  • Mode 1 : Liste les unités dans lesquelles seul le fichier .pas correspondant figure dans le chemin de recherche.
  • Mode 2 : Liste les unités dans lesquelles seul le fichier .dcu figure dans le chemin de recherche. Cela peut se produire lorsque vous travaillez avec des bibliothèques tierces parties.

Si vous désactivez l'option "Les .DCU des clauses uses sont traités dans l'achèvement de code", vous basculez en mode 1. Cela peut être utile si vous travaillez dans un environnement dans lequel le chemin de recherche contient des répertoires avec de nombreux .DCU incompatibles avec la plate-forme en cours.

Par exemple :

Vous developpez une app pour Win32 et MacOS. Dans les deux plates-formes, le chemin de recherche contient de nombreux répertoires qui comportent des DCU Win32. Lorsque votre plate-forme en cours est MacOS, vous pouvez demander "l'achèvement des clauses uses". Lorsque vous ne voudrez plus voir les unités Win32, vous désactiverez la suggestion des DCU sur MacOS.

Autoriser le code unsafe

Le terme "unsafe" (non protégé) provient du framework .NET dans lequel "unsafe" signifie "non géré". C'est le code qui accède directement à la mémoire, sans passer par des structures de données et du code "géré". Dans l'environnement .NET, le code "géré" et les structures de données sont peu susceptibles de subir une corruption de la mémoire ou des fuites de ressources. Dans la mesure où les instructions d'assemblage ne sont ni typées ni "gérées", et accèdent presque toujours directement à la mémoire, elles sont considérées comme "unsafe" (non protégées) conformément aux règles du framework .NET. Evidemment, le code de l'assembleur est sûr lorsqu'il est écrit correctement.

Dans Delphi, trois avertissements permettent de signaler le code unsafe (non protégé) afin qu'il puisse être facilement partagé entre Win32 et .NET. Si vous n'êtes pas concerné par ces messages de code unsafe, vous pouvez désactiver les avertissements depuis la page Conseils et avertissements dans la boîte de dialogue Options de projet.

Voir :

‑P

  • macOS 

Générer la documentation XML

Génère un fichier contenant la représentation XML de votre répertoire projet. Pour de plus amples informations, voir Documentation XML pour le code Delphi.
Valeur par défaut = False

‑‑doc

Rechercher aussi des noms de fichiers 8.3

Transmet le commutateur -P du compilateur pour DCC32.exe ou DCC64.exe.

Valeur par défaut = False

Vous permet d'utiliser les noms de fichier DOS d'ancien style qui sont au format nomfichier.ext, où nomfichier est une chaîne de 1 à 8 caractères.

Prise en charge sur les plates-formes Windows 32 bits et 64 bits .

‑P

  • Windows 32 bits
  • Windows 64 bits

Générer les informations de dépendance d'unité

Transmet le commutateur -depends du compilateur pour DCC32.exe. Valeur par défaut = False

Provoque la génération d'un fichier texte d'extension ".d" par les compilateurs en ligne de commande Delphi. Les fichiers ".d" générés listent tous les .dcus, les noms de fichiers d'unités du projet (et leurs dépendances), y compris les noms de chemins d'accès.

Remarque: Cette option s'applique seulement au compilateur en ligne de commande. Pour obtenir une dépendance générée pour un projet dans l'EDI, il est nécessaire de définir "Utiliser MSBuild de façon externe pour compiler" sur true.

‑‑depends

$IF doit être terminé par $IFEND

Permet d'utiliser la directive $IFEND (au lieu de la directive $ENDIF correcte) pour terminer une clause $IF. Si cette option n'est pas activée, les compilateurs peuvent émettre E2029. Voir la directive Legacy IFEND (Delphi) du compilateur.

Valeur par défaut = False

‑‑legacy-ifend

Répertoire de sortie de la documentation XML

Spécifie le répertoire où sera générée la documentation XML de votre projet. Voir l'option Générer la documentation XML ci-dessus.

‑NX

Générer des bundles d'application 32 bits et 64 bits Android (armeabi-v7a + arm64-v8a)

Le compilateur crée un bundle d'application contenant des binaires 32 bits et 64 bits. Valeur par défaut = False (seul le binaire 64 bits est créé).

  • 64 bit Android

Générer le fichier binaire universel macOS (x86_64 + arm64)

Le compilateur crée un fichier binaire universel pour Intel macOS 64 bits et ARM macOS 64 bits. Valeur par défaut = False (seul le binaire ARM 64 bits est créé).

  • macOS ARM 64 bits 

Options Erreurs d'exécution

Elément Description Commutateurs du compilateur Toutes les plates-formes sont prises en charge sauf spécification contraire

Vérification E/S

Active ou désactive la génération automatique du code vérifiant le résultat d'un appel à une procédure d'E/S. Si une procédure d'E/S renvoie un résultat d'E/S non nul alors que ce commutateur est activé, une exception EInOutError est déclenchée (ou le programme s'arrête si la gestion des exceptions est désactivée). Quand ce commutateur est désactivé, vous devez vérifier les erreurs d'E/S en appelant IOResult.
Valeur par défaut = True

‑$I+
‑$I‑

Vérification de débordement

Contrôle la génération du code qui teste le dépassement de capacité. Quand cette option est activée (équivalent à {$Q+}), certaines opérations arithmétiques entières (+, -, *, Abs, Sqr, Succ, Pred, Inc et Dec) font l'objet d'un test de dépassement de capacité. Le code de ces opérations est suivi d'un code supplémentaire vérifiant si le résultat appartient à l'intervalle pris en charge. Si un test de dépassement de capacité échoue, une exception EIntOverflow est déclenchée (ou le programme s'arrête si la gestion des exceptions est désactivée). Ce commutateur est généralement utilisé conjointement à l'option de vérification des limites (commutateur {$R}), qui active et désactive la génération de code de test de débordement. L'activation du test de dépassement de capacité ralentit l'exécution du programme et augmente sa taille.

Valeur par défaut = True

Remarque: En mettant cette option à true, vous risquez de subir une baisse des performances lors du débogage.

‑$Q+
‑$Q‑

Vérification des limites

Active ou désactive la génération du code qui vérifie les limites. Quand cette option est activée (équivalent à {$R+}), pour toute expression de type tableau ou chaîne indexée, l'index est vérifié pour s'assurer qu'il reste dans les limites définies. Le même test s'applique à toute assignation de valeur à une variable de type scalaire ou sous-intervalle. Si une vérification de limites échoue, une exception ERangeError est déclenchée (ou le programme s'arrête si la gestion des exceptions est désactivée). Activer la vérification des limites ralentit votre programme et en augmente le volume.

Valeur par défaut = True

Remarque: En mettant cette option à true, vous risquez de subir une baisse des performances lors du débogage.

‑$R+
‑$R‑

Options de syntaxe

Elément Description Commutateurs du compilateur Toutes les plates-formes sont prises en charge sauf spécification contraire

Constantes typées affectables

Contrôle si les constantes typées peuvent être modifiées ou non. Quand cette option est activée (équivalent à {$J+}), les constantes typées peuvent être modifiées et sont essentiellement des variables initialisées. Quand elle est désactivée (équivalent à {$J-}), les constantes typées sont réellement constantes et toute tentative de modification d'une constante typée provoque l'émission d'une erreur par le compilateur. Les constantes affectables font référence à l'utilisation d'une constante typée comme variable modifiable à l'exécution.

L'ancien code source utilisant des constantes typées affectables doit être compilé avec cette option activée, mais pour les nouvelles applications, il est conseillé d'initialiser les variables et de compiler votre code avec l'option désactivée.

Valeur par défaut = False

‑$J+
‑$J‑

Evaluation booléenne complète

Permet d'alterner entre les deux modèles de génération de code Delphi pour les opérateurs booléens AND et OR. Quand cette option est activée (équivalent à {$B+}), le compilateur génère un code évaluant entièrement les expressions booléennes. Tous les opérandes des expressions booléennes contenant des opérateurs AND et OR sont alors évalués, même si le résultat de l'expression totale est déjà connu. Quand cette option est désactivée (équivalent à {$B-}), le compilateur génère un code d'évaluation "court-circuit" des expressions booléennes. Ceci signifie que l'évaluation s'arrête à partir du moment où le résultat de l'expression devient évident dans l'ordre d'évaluation de gauche à droite. Valeur par défaut = False

‑$B+
‑$B‑

Syntaxe étendue

N'existe que pour des raisons de compatibilité descendante. Vous ne devez pas utiliser cette option (équivalent au mode {$X-}) lors de l'écriture d'applications Delphi. Cette option active ou désactive la syntaxe étendue de Delphi :

Instructions de fonctions. En mode {$X+}, les appels de fonctions peuvent être utilisés comme des appels de procédures ; autrement dit, le résultat d'un appel à une fonction peut être ignoré plutôt que transmis à une autre fonction ou utilisé dans une opération ou une assignation. Généralement, les calculs opérés par une fonction sont renvoyés dans son résultat et le fait de ne pas vouloir récupérer ce résultat paraît un peu absurde. Mais, une fonction est parfois appelée parce qu'elle effectue une tâche, comme la définition de la valeur d'une variable globale, sans produire un résultat utile.

La variable Result. Quand cette option est activée (équivalent à {$X+}), la variable prédéfinie Result peut servir dans le corps d'une fonction à contenir la valeur de retour de la fonction.

Chaînes terminées par null. Quand cette option est activée, les chaînes Delphi peuvent être assignées à des tableaux de caractères indexés à partir de zéro (array[0..X] of Char), qui sont compatibles avec les types PChar.

Valeur par défaut = True

‑$X+
‑$X‑

Chaînes longues par défaut

Cette option (équivalente à la directive {$H}) contrôle la signification du mot réservé string utilisé seul dans une déclaration de type. Le type générique string peut représenter soit une chaîne longue allouée dynamiquement (de type fondamental UnicodeString) ou une chaîne courte allouée statiquement (de type fondamental ShortString). Par défaut, Delphi définit le type chaîne générique par un UnicodeString.

Tous les composants des bibliothèques de composants sont compilés dans cet état. Si vous écrivez des composants, ils doivent aussi utiliser des chaînes longues comme doit le faire tout code recevant des données issues des propriétés de type chaîne de la bibliothèque de composants. L'état désactivé (équivalent à {$H-}) est surtout pratique pour utiliser du code écrit pour des versions précédentes de Delphi qui utilisaient par défaut le type chaîne courte. Vous pouvez localement redéfinir la signification des définitions des types chaîne pour assurer la génération de chaînes courtes. Vous pouvez aussi changer les déclarations des types chaînes courtes en string[255] ou ShortString, qui ne sont pas ambigus et sont indépendants de l'option activée.

Valeur par défaut = True

‑$H+
‑$H‑

  • Windows 32 bits
  • Windows 64 bits
  • macOS 

Paramètres ouverts

N'a de signification que pour du code compilé gérant les chaînes vastes et assure une compatibilité descendante avec les premières versions de Delphi et Object Pascal. Cette option (équivalent à la directive {$P}) contrôle la signification des paramètres variables déclarés en utilisant le mot clé string dans les chaînes vastes désactivées (équivalent à l'état {$H-}). Quand cette option est désactivée (équivalent à {$P-}), les paramètres variables déclarés à l'aide du mot clé string sont des paramètres variables normaux, alors que quand elle est activée (équivalent à {$P+}) il s'agit de paramètres chaînes ouverts. Quelle que soit la définition de cette option, il est toujours possible d'utiliser l'identificateur OpenString pour déclarer des paramètres chaînes ouverts.

Valeur par défaut = True

‑$P+
‑$P‑

Chaînes-var strictes

Cette option (équivalent à la directive {$V}) n'est significative que pour du code Delphi utilisant des chaînes courtes ; elle assure une compatibilité descendante avec les premières versions de Delphi et Object Pascal. Elle contrôle le type sur les chaînes courtes transmises en tant que paramètres variables. Quand elle est activée (équivalent à {$V+}), un type strict est effectué, nécessitant que les paramètres formels et effectifs soient du même type de chaîne. Quand elle est désactivée (équivalent à {$V-}) n'importe quelle variable de type chaîne courte est autorisée en tant que paramètre effectif, même si sa longueur maximale déclarée diffère de celle du paramètre formel.

Valeur par défaut = True

‑$V+
‑$V‑

Opérateur @ typé

Contrôle les types des valeurs pointeur générées par l'opérateur @ et la compatibilité des types de pointeurs. Quand cette option est désactivée (équivalent à {$T-}), le résultat de l'opérateur @ est toujours un pointeur (Pointer) non typé compatible avec tous les autres types de pointeurs. Lorsque @ est appliqué à une référence de variable avec cette option activée (équivalent à {$T+}), le résultat est un pointeur typé qui n'est compatible qu'avec Pointer ou avec d'autres pointeurs sur le type de la variable. Quand cette option est désactivée, des types de pointeurs distincts autres que Pointer sont incompatibles (même s'ils sont des pointeurs sur le même type). Quand elle est activée, les pointeurs sur le même type sont compatibles.

Valeur par défaut = False

‑$T+
‑$T‑


Conseil: Pour afficher les options de compilation dans la fenêtre Messages quand vous compilez un projet, choisissez Outils > Options > EDI > Compilation et exécution et sélectionnez Afficher la ligne de commande. A la prochaine compilation d'un projet, la commande utilisée pour compiler le projet et le fichier de réponse sont affichés tous deux dans la fenêtre Messages. Le fichier de réponse liste les options du compilateur et les fichiers à compiler.


Attention: RAD Studio vérifie la quantité de mémoire utilisée par le compilateur de l'EDI. Lorsqu'elle dépasse 60 % de la mémoire disponible, le compilateur vide le cache des unités. Par défaut, la limite est définie à 60%, mais sur certains systèmes ce pourcentage est trop élevé et provoque un dysfonctionnement de l'EDI (blocage ou plantage).

Pour modifier le seuil de 60 %, utilisez le paramètre du registre et suivez les étapes ci-dessous :

  1. Fermez l'EDI.
  2. Exécutez regedit et accédez à la clé suivante : HKEY_CURRENT_USER\Software\Embarcadero\BDS\22.0\Compiling
  3. Créez une nouvelle valeur DWORD appelée “ProcMemAllocLimit” et définissez sa valeur sur 50 (décimal).
  4. Fermez regedit.
  5. Démarrez l'EDI.

Voir aussi