22 Voix

Lazarus: Détecter le Système d'Exploitation (Compiler Switch)

Tutoriel de Stefan Trost | Dernière mise à jour le 07/01/2023 | Créé le 01/10/2020

Lors de l'écriture d'applications pour plusieurs systèmes d'exploitation utilisant Lazarus, il peut être nécessaire d'utiliser un code différent ou d'inclure différentes unités à certains moments en fonction du système d'exploitation actuel. Néanmoins, bien sûr, vous ne voulez pas ajuster le code encore et encore au système actuel sur lequel vous compilez. Nous aimerions avoir une solution pour utiliser le même code sur tous les systèmes, bien qu'il existe certaines parties dépendant du système.

Donc, dans cette astuce, je voudrais vous montrer un moyen de montrer au compilateur qu'un certain code ou une certaine partie d'une unit ne devrait s'appliquer qu'à un système spécifique. Vous pouvez utiliser les directives du compilateur {$IFDEF}, {$ENDIF} ainsi que {$ELSE} pour cela.

Exemple

Tout d'abord, jetez un œil à un petit exemple:

{$IFDEF WINDOWS}
   {$IFDEF WIN32}
      ShowMessage('Windows 32 Bit');
   {$ENDIF}

   {$IFDEF WIN64}
      ShowMessage('Windows 64 Bit');
   {$ENDIF} 
{$ELSE}
   ShowMessage('Pas de Windows');
{$ENDIF}

Dans cet exemple, nous utilisons d'abord une condition IF pour vérifier si nous sommes sur un système Windows. Si tel est le cas, nous recherchons s'il s'agit d'un Windows 32 bits ou 64 bits et nous en alertons avec ShowMessage. Sinon, nous alertons un message indiquant qu'il ne s'agit pas de Windows.

Zones d’Application

Vous pouvez combiner les directives comme vous le souhaitez et vous pouvez les utiliser à n'importe quel endroit que vous souhaitez. Vous pouvez donc non seulement rendre des parties du code uniquement disponibles pour des systèmes spécifiques, mais, par exemple, vous pouvez également limiter des procédures ou des fonctions entières, y compris leurs déclarations à certains systèmes ou, par exemple, ajouter ou sauter des unités en fonction du système.

Un exemple typique serait des unités liées au système telles que l'unité Windows ou les unités ShellApi, CocoaAll ou BaseUnix, qui, selon l'unité, ne peuvent être utilisées que sur Windows, MacOS ou Linux. Si nous voulons utiliser des fonctions d'une ou plusieurs de ces unités et que nous voulons également utiliser le même code pour d'autres systèmes, nous pourrions écrire ce qui suit, comme exemple:

uses
  {$IFDEF WINDOWS} Windows, ShellApi, {$ENDIF}
  {$IFDEF DARWIN} CocoaAll, {$ENDIF}
  {$IFDEF LINUX} BaseUnix, {$ENDIF}
  Classes, SysUtils, FileUtil;

Cela n'inclurait que les unités Windows et ShellApi lors de la compilation sous Windows, CocoaAll uniquement sous macOS, BaseUnix uniquement sous Linux et les unités Classes, SysUtils ainisi que FileUtil sous tous les systèmes.

Il est important de faire attention ici que le code a du sens pour toutes les combinaisons de systèmes. Par exemple, les virgules sont définies ici afin que la liste des unités soit toujours correctement séparée avec des virgules, quelle que soit quelle condition s'applique.

Liste des Directives du Système d’Exploitation

Dans ce tableau, j'ai répertorié les directives les plus importantes pour chaque système.

SystèmeDirective
Tous les systèmes Windows{$IFDEF WINDOWS}
Windows 64 Bit{$IFDEF WIN64}
Windows 32 Bit{$IFDEF WIN32}
Windows 16 Bit{$IFDEF WIN16}
Windows CE{$IFDEF WINCE}
Linux{$IFDEF LINUX}
Mac OS X, macOS{$IFDEF DARWIN}
Classic Macintosh{$IFDEF MAC}
OS2{$IFDEF OS2}
FreeBSD{$IFDEF FREEBSD}
NetBSD{$IFDEF NETBSD}
OpenBSD{$IFDEF OPENBSD}
Amiga{$IFDEF AMIGA}
Atari{$IFDEF ATARI}
Nintendo DS{$IFDEF NDS}
MS-DOS{$IFDEF MSDOS}
PalmOS{$IFDEF PALMOS}
Android{$IFDEF ANDROID}

En plus de ces directives spécifiques, vous pouvez utiliser {$IFDEF UNIX} pour aborder n'importe quel système Unix. Cette directive s'applique aux macOS, Mac OS X, FreeBSD, NetBSD, SunOS, OpenBSD ainsi que d'autres systèmes Linux et Unix. Avec {$IFDEF BSD}, vous pouvez aborder FreeBSD ainsi que NetBSD et OpenBSD.

Pour plus de directives, veuillez visiter Compiler Defines During Compilation (définitions du compilateur pendant la compilation) sur freepascal.org. Avec ces directives, vous pouvez par exemple détecter la CPU utilisé, avec quelle version de Free Pascal il est compilé, qu'il y ait certaines fonctionnalités disponibles et bien d'autres choses.

RépondrePositifNégatif

Sur l’Auteur

AvatarVous pouvez trouver des logiciels de Stefan Trost sur fr.sttmedia.com. Avez-vous besoin d'un logiciel personnalisé selon vos propres besoins? Écrivez-nous: fr.sttmedia.com/contact
Voir Profil

 

Sujets Connexes

CSS: Comment inclure CSS dans HTML

Tutoriel | 0 Commentaires

Avis Important

Veuillez noter: Les contributions publiées sur askingbox.com sont des contributions d’utilisateurs et ne doivent pas remplacer les conseils d’un professionnel. Ils ne sont pas vérifiés par des indépendants et ne reflètent pas nécessairement l’opinion de askingbox.com. Apprendre encore plus.

Participer

Posez votre propre question ou écrivez votre propre article sur askingbox.com. Voici comment.