Sign in Join
Wiki copytemporary

Conditional compilation/fr: what changed

Revision 0 to 1. Removed lines have a minus sign; added lines have a plus sign.

Title: Conditional compilation/fr

OldNewLine
1+# Directive à la compilation \$DEFINE et \$IFDEF
2+
3+## Pourquoi ?
4+
5+Si vous avez une application qui demande plusieurs variantes, disons pour deux clients ou pour deux systèmes d'exploitation alors les directives de compilation sont faites pour vous. Un exemple pratique est quand vous codez pour plusieurs plates-formes. Les applications 32 bit permettent des fichiers de 4 Go parce c'est la taille maximale d'un Integer mais d'autres systèmes d'exploitation n'ont pas cette limitation. Ainsi une définition de FileSize peut être la suivante :
6+
7+``` pascal
8+var
9+ MyFilesize:
10+ {$ifdef Win32}
11+ Cardinal
12+ {$else}
13+ int64
14+ {$endif}
15+```
16+
17+Rien de ceci n'est sensible à la casse. {\$ifdef}, {\$else}, etc sont appelés symboles. Quand ils sont assemblés pour réaliser une logique, le code résultant est appelé une macro. Pour d'autres exemples pratiques, voir : [[Code Conversion Guide/fr|Code_Conversion_Guide/fr#Les_variables_utiles_pour_le_compilateur]].
18+
19+Une autre façon de faire la même chose est d'utiliser les macros de l'IDE [[IDE Macros in paths and filenames/fr]].
20+
21+Il ne reste plus qu'à savoir où est placé {\$DEFINE WIN32}, dans le code ou l'IDE.
22+
23+Il y a trois façons de faire cela.
24+
25+### Unité basée sur les instructions {\$DEFINE} et {\$IFDEF}
26+
27+``` pascal
28+ //Insérez le symbole $DEFINE à un point antérieur du code de l'unité
29+ {$DEFINE Win32}
30+ var
31+ MyFilesize:
32+ {$ifdef Win32}
33+ Cardinal
34+ {$else}
35+ int64
36+ {$endif}
37+ //Insert $UNDEF symbol
38+ {UNDEF $Win32}
39+
40+```
41+
42+### Utiliser l'EDI
43+
44+Dans l'EDI, aller dans la page Projet \| Options du projet \| Options du compilateur \| Options personnalisées et entrez -dWin32 ou Win32, selon la version. Dans Lazarus 1.2.4, le -d est entré automatiquement.
45+
46+Dans les options personnalisées
47+
48+`-d est identique à #DEFINE`\
49+`-u est identique à #UNDEF`
50+
51+Ces entrées s'appliquent à la totalité du projet.
52+
53+### Utilisez un fichier d'inclusion
54+
55+Voir l'exemple plus détaillé plus bas.
56+
57+## Symboles
58+
59+Les \$IFNDEF, \$IFDEF, \$ENDIF, \$ELSE, \$DEFINE, \$UNDEF imbriqués sont permis. Voir [[local compiler directives/fr|Conditonnelle de compilation]] pour une liste complète.
60+
61+## Exemples complexes
62+
63+Les defines et les fichiers d'inclusion (.inc) basés unité doivent ajoutés dans chaque unité concernée. Alors qu'une option personnalisée s'applique à toutes les unités du projet.
64+
65+### Instructions {\$DEFINE} et {\$IFDEF} basés unité
66+
67+Créez un projet avec une simple fiche comme ci-dessous. Commentez et décommentez les deux instructions {\$DEFINE} tour à tour et regardez ce qui se passe. Si vous ajoutez une seconde fiche (Form2) qui s'ouvre quand la première (Form1) est cliquée, des instructions similaires fonctionneront indépendamment des instructions {\$DEFINE} de Form1.
68+
69+``` pascal
70+var
71+ Form1: TForm1;
72+
73+implementation
74+
75+{$R *.lfm}
76+{$DEFINE RED}
77+//{$DEFINE BLUE}
78+{ TForm1 }
79+
80+procedure TForm1.FormClick(Sender: TObject);
81+begin
82+ {$IFDEF RED} Form1.Color := clRed; {$ENDIF}
83+ {$IFDEF BLUE} Form1.Color := clBlue; {$ENDIF}
84+ {$IFDEF BLUE AND $IFDEF RED} Form1.Color := clYellow; {$ENDIF}
85+ {$IFNDEF RED AND $IFNDEF BLUE} Form1.Color := clAqua; {$ENDIF}
86+end;
87+```
88+
89+### Fichiers d'inclusion
90+
91+Les fichiers d'inclusion ajoute du code dans toute unité .pas.
92+
93+Créez un fichier appelé unit1.inc (il pourrait s'appeler n_importe_quoi.pas) qui contient :
94+
95+``` pascal
96+{$DEFINE RED}
97+//{$DEFINE BLUE}
98+```
99+
100+Créeez une autre appelée unit1a.inc qui contient :
101+
102+``` pascal
103+ {$IFDEF RED} Form1.Color := clRed; {$ENDIF}
104+ {$IFDEF BLUE} Form1.Color := clBlue; {$ENDIF}
105+ {$IFDEF BLUE AND $IFDEF RED} Form1.Color := clYellow; {$ENDIF}
106+ {$IFNDEF RED AND $IFNDEF BLUE} Form1.Color := clAqua; {$ENDIF}
107+```
108+
109+Ajoutez-les dans le dossier du projet. Une fois compilées, ces lignes remplaceront les instructions \$INCLUDE ci-dessous. Les deux méthodes présentent le même code au compilateur. Néanmoins, employer des fichiers d'inclusion permet de répondre à des exigences plus complexes.
110+
111+``` pascal
112+var
113+ Form1: TForm1;
114+
115+implementation
116+
117+{$R *.lfm}
118+ {$INCLUDE unit1.inc}
119+{ TForm1 }
120+
121+procedure TForm1.FormClick(Sender: TObject);
122+begin
123+ {$INCLUDE unit1a.inc}
124+end;
125+```
126+
127+Maintenant, nous pouvons l'étendre à ceci :
128+
129+``` pascal
130+var
131+ Form1: TForm1;
132+
133+implementation
134+
135+{$R *.lfm}
136+{$IFDEF ABC}
137+ {$INCLUDE abc.inc}
138+{$ELSE}
139+ {$INCLUDE xyz.inc}
140+{$ENDIF}
141+
142+{ TForm1 }
143+
144+procedure TForm1.FormClick(Sender: TObject);
145+begin
146+ ... some code ...
147+{$IFDEF ABC}
148+ {$INCLUDE abcCode.inc}
149+{$ELSE}
150+ {$INCLUDE xyzCode.inc}
151+{$ENDIF}
152+... some more code ...
153+end;
154+```
155+
156+### Projet \| Options du projet \| Options du compilateur \| Options personnalisées
157+
158+Mettre en commentaire ou effacer les symboles {\$DEFINE} dans votre code et ajouter les directives comme ci-dessous. Dans ce cas, les directives s'appliqueront à toutes les unités.
159+
160+Ceci définit les symboles FPC. Par exemple, -dDEBUG -dVerbose définiront les symboles FPC DEBUG et Verbose, ainsi vous pouvez utiliser {\$IFDEF Debug}. Voir [[IDE Macros in paths and filenames]].
161+
162+Remarquez le préfixe -d.
163+
164+`-dRED`\
165+`-dBLUE`
166+
167+Une approche similaire peut être utilisée en compilant avec FPC au lieu de Lazarus : spécifiez l'argument -d... dans la ligne de commande en appelant FPC (p.ex. dans un fichier de commandes).
168+
169+Depuis Lazarus 1.2, la nouvelle IHM des options offre un choix : soit entrer la directive avec -d comme précédemment, soit utiliser l'interface graphique. L'interface graphique stocke toutes les directives entrées et active celles que vous avez sélectionnées. Celles-ci sont alors affichées comme dans la pré version 1.2 avec le préfixe -d.
170+
171+---
172+*From the Free Pascal wiki, page "Conditional compilation/fr", as it stood on 2020-02-11 after a change by Trev, out of the wiki's dump of 2024-05-26. Copyright stays with the author who wrote it, according to the old wiki's [[Licensing]] page. If you have concerns about this material, [message the admin](/wiki-contact).*

Back to history