Have an amazing solution built in RAD Studio? Let us know. Looking for discounts? Visit our Special Offers page!
DelphiRAD Studio

Delphi 11 Alexandria Defines

testdefinesinide

この記事は、David Intersimoneのブログの抄訳です

先日のDelphiCon 2021のセッション「Multi-Platform Explorations using Delphi, FMX, Feeds, REST and More」での講演の中で、uses文、変数定義、およびコードの一部にIFDEFを使用するサンプルコードを紹介いたしました。

このブログでは、Windows(Win32/Win64)、macOS、iOS、Androidの各プラットフォーム向けにコンパイルする際のdefineの使用例を紹介いたします。

また、各プラットフォームで実行したサンプルプログラムから出力したスクリーンショットも掲載しています。こちらのセッションリンクから講演のサンプルプロジェクトをすべてダウンロードできます。

下記のシンプルな DelphiのFireMonkey アプリケーションには、TButton と TMemo が配置されています。ButtonのOnClickイベントハンドラでは、コードがプラットフォームに関する情報と、各プラットフォームに定義されたコンパイラを出力しています。

uses
  System.IOUtils;
 
procedure TForm1.Button1Click(Sender: TObject);
begin
  case TOSVersion.Platform of
    TOSVersion.TPlatform.pfWindows:
      PlatformPath := 'Windows';
    TOSVersion.TPlatform.pfMacOS:
      PlatformPath := 'macOS';
    TOSVersion.TPlatform.pfiOS:
      PlatformPath := 'iOS';
    TOSVersion.TPlatform.pfAndroid:
      PlatformPath := 'Android';
    TOSVersion.TPlatform.pfWinRT:
      PlatformPath := 'WinRT';
    TOSVersion.TPlatform.pfLinux:
      PlatformPath := 'Linux'
  else
      PlatformPath := 'Unexpected platform'
  end;
 
  Memo1.Lines.Add('TPlatform: '+PlatformPath);
  Memo1.Lines.Add(TOSVersion.ToString);
 
  {$IF DEFINED(IOS)}
    Memo1.Lines.Add('Defined: IOS');
  {$ENDIF}
  {$IF DEFINED(IOS32)}
    Memo1.Lines.Add('Defined: IOS32');
  {$ENDIF}
  {$IF DEFINED(IOS64)}
    Memo1.Lines.Add('Defined: IOS64');
  {$ENDIF}
 
  {$IF DEFINED(ANDROID)}
    Memo1.Lines.Add('Defined: ANDROID');
  {$ENDIF}
  {$IF DEFINED(ANDROID32)}
    Memo1.Lines.Add('Defined: ANDROID32');
  {$ENDIF}
  {$IF DEFINED(ANDROID64)}
    Memo1.Lines.Add('Defined: ANDROID64');
  {$ENDIF}
 
  {$IF DEFINED(MACOS)}
    Memo1.Lines.Add('Defined: MACOS');
  {$ENDIF}
  {$IF DEFINED(MACOS64)}
    Memo1.Lines.Add('Defined: MACOS64');
  {$ENDIF}
  {$IF DEFINED(OSX)}
    Memo1.Lines.Add('Defined: OSX');
  {$ENDIF}
  {$IF DEFINED(OSX64)}
    Memo1.Lines.Add('Defined: OSX64');
  {$ENDIF}
 
  {$IF DEFINED(MSWINDOWS)}
    Memo1.Lines.Add('Defined: MSWINDOWS');
  {$ENDIF}
  {$IF DEFINED(WIN32)}
    Memo1.Lines.Add('Defined: WIN32');
  {$ENDIF}
  {$IF DEFINED(WIN64)}
    Memo1.Lines.Add('Defined: WIN64');
  {$ENDIF}
 
  {$IF DEFINED(LINUX)}
    Memo1.Lines.Add('Defined: LINUX');
  {$ENDIF}
  {$IF DEFINED(LINUX32)}
    Memo1.Lines.Add('Defined: LINUX32');
  {$ENDIF}
  {$IF DEFINED(LINUX64)}
    Memo1.Lines.Add('Defined: LINUX64');
  {$ENDIF}
 
 
  {$IF DEFINED(DCC)}
    Memo1.Lines.Add('Defined: DCC');
  {$ENDIF}
 
  {$IF DEFINED(CONSOLE)}
    Memo1.Lines.Add('Defined: CONSOLE');
  {$ENDIF}
 
  {$IF DEFINED(POSIX)}
    Memo1.Lines.Add('Defined: POSIX');
  {$ENDIF}
  {$IF DEFINED(POSIX32)}
    Memo1.Lines.Add('Defined: POSIX32');
  {$ENDIF}
  {$IF DEFINED(POSIX64)}
    Memo1.Lines.Add('Defined: POSIX64');
  {$ENDIF}
 
  {$IF DEFINED(CPUX86)}
    Memo1.Lines.Add('Defined: CPUX86');
  {$ENDIF}
  {$IF DEFINED(CPUX64)}
    Memo1.Lines.Add('Defined: CPUX64');
  {$ENDIF}
 
  {$IF DEFINED(CPU32BITS)}
    Memo1.Lines.Add('Defined: CPU32BITS');
  {$ENDIF}
 
  {$IF DEFINED(CPU64BITS)}
    Memo1.Lines.Add('Defined: CPU64BITS');
  {$ENDIF}
 
  {$IF DEFINED(CPUARM)}
    Memo1.Lines.Add('Defined: CPUARM');
  {$ENDIF}
  {$IF DEFINED(CPUARM32)}
    Memo1.Lines.Add('Defined: CPUARM32');
  {$ENDIF}
  {$IF DEFINED(CPUARM64)}
    Memo1.Lines.Add('Defined: CPUARM64');
  {$ENDIF}
 
  {$IFDEF DEBUG}
    Memo1.Lines.Add('DEBUG is Defined');
  {$ELSE}
    Memo1.Lines.Add('DEBUG is Not Defined');
  {$ENDIF}
end;

下図は、各プラットフォームのスクリーンショットです。

android 64 defines
Android 64ビット defines
ios15 1 defines
iOS 151 defines
macos 64 defines
macOS 64ビット defines
win32 defines
Win32 defines
win64 defines
Win64 defines

関連した情報として以下のdocwikiもご参考ください。

https://docwiki.embarcadero.com/RADStudio/Alexandria/ja/条件付きコンパイル(Delphi)

RAD Studio 13.1 Florence Now Available See What's New in RAD Studio 13.1 Delphi is 31 - Webinar Replay

Reduce development time and get to market faster with RAD Studio, Delphi, or C++Builder.
Design. Code. Compile. Deploy.

Start Free Trial   Upgrade Today

   Free Delphi Community Edition   Free C++Builder Community Edition

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.

IN THE ARTICLES