22 Votos

Lazarus: Detectar el Sistema Operativo (Compiler Switch)

Tutorial de Stefan Trost | Última actualización el 07/01/2023 | Creado el 01/10/2020

Al escribir aplicaciones para múltiples sistemas operativos usando Lazarus, puede ser necesario usar un código diferente o incluir diferentes unidades en algunos puntos dependiendo del sistema operativo actual. Sin embargo, por supuesto, no desea ajustar el código una y otra vez al sistema actual en el que está compilando. Nos gustaría tener una solución para usar el mismo código en todos los sistemas, aunque hay algunas partes que dependen del sistema.

Entonces, en este consejo, me gustaría mostrarle una forma de cómo mostrarle al compilador que un cierto código o una cierta parte de una unit solo debe aplicarse a un sistema específico. Puede usar las directivas del compilador {$IFDEF}, {$ENDIF} así como {$ELSE} para esto.

Ejemplo

Primero, eche un vistazo a un pequeño ejemplo:

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

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

En este ejemplo, primero usamos una condición IF para verificar si estamos en un sistema Windows. Si es así, buscamos si es un Windows de 32 o 64 bits y lo alertamos con ShowMessage. Si no es así, avisamos con un mensaje de que no es Windows.

Areas de Aplicación

Puede combinar las directivas como desee y puede usarlas en cualquier lugar que desee. Por lo tanto, no solo puede hacer que partes del código solo estén disponibles para sistemas específicos, sino que, por ejemplo, también puede limitar procedimientos o funciones completos, incluidas sus declaraciones a ciertos sistemas o, por ejemplo, agregar o omitir unidades dependiendo del sistema.

Un ejemplo típico sería unidades relacionadas con el sistema, como la unidad Windows o las unidades ShellApi, CocoaAll o BaseUnix, que, dependiendo de la unidad, solo se pueden usar en Windows, MacOS o Linux. Si queremos usar funciones de una o más de estas unidades y también queremos usar el mismo código para otros sistemas, podríamos escribir lo siguiente, como ejemplo:

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

Esto solo incluiría las unidades Windows y ShellApi cuando se compilan en Windows, CocoaAll solo en macOS, BaseUnix solo en Linux y las unidades Classes, SysUtils y FileUtil en todos los sistemas.

Es importante tener cuidado aquí que el código tenga sentido para todas las combinaciones de sistemas. Por ejemplo, las comas se establecen aquí para que la lista de las unidades siempre se separe correctamente con comas, independientemente de qué condición se aplique.

Lista de Directivas del Sistema Operativo

En esta tabla, he enumerado las directivas más importantes para cada sistema.

SistemaDirectiva
Todos los sistemas 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}

Además de estas directivas específicas, puede usar {$IFDEF UNIX} para abordar cualquier sistema Unix. Esta directiva se aplica a MacOS, Mac OS X, FreeBSD, NetBSD, SunOS, OpenBSD, así como otros sistemas Linux y Unix. Con {$IFDEF BSD} puede abordar FreeBSD asi como NetBSD y OpenBSD.

Para obtener más instrucciones, visite Compiler Defines During Compilation (definiciones del compilador durante la compilación) en freepascal.org. Con esas directivas, puede, por ejemplo, detectar la CPU en uso, con la que versión de Free Pascal se compila, que haya ciertas características disponibles y muchas otras cosas.

ResponderPositivoNegativo

Sobre el Autor

AvatarPuede encontrar software de Stefan Trost en la pagina es.sttmedia.com. ¿Necesita un software individual según sus propios requisitos? Escribenos: es.sttmedia.com/contacto
Ver Perfil

 

Temas Relacionados

CSS: Cómo incluir CSS en HTML

Tutorial | 0 Comentarios

Aviso Importante

Por favor tenga en cuenta: Las contribuciones publicadas en askingbox.com son contribuciones de los usuarios y no deben reemplazar el asesoramiento profesional. No son verificados por independientes y no reflejan necesariamente la opinión de askingbox.com. Aprende más.

Participar

Haga su propia pregunta o escriba su propio artículo en askingbox.com. He aquí cómo.