RAD 1월 11일, 2022에 포스트됨 공유하기 1월 11일, 2022에 포스트됨 원문 링크: https://blogs.embarcadero.com/delphi-11-alexandria-defines/ 작성자(작성일): David Intersimone (2021.11) As part of my recent DelphiCon 2021 session, Multi-Platform Explorations using Delphi, FMX, Feeds, REST and More, my example code needed to use IFDEFs for some of the uses statements, variable definitions and code. This blog post contains an example of the use of defines when compiling for Windows (Win32/Win64), macOS, iOS and Android platforms. I also include screen shots of the sample output on each platform. You can download all of my talk’s sample projects using the session links above. 지난 DelphiCon 2021에서는 델파이, FMX, Feeds, REST 등을 활용한 멀티 플랫폼 탐색 세션을 진행했는데 이 때 유즈(uses) 절, 변수 정의, 코드에 IFDEF를 사용하는 샘플 코드 작성이 필요했었다. 그래서 이번 글을 통해 정의를 사용하는 예제들을 다루려고 한다. 윈도우(Win32/Win64), 맥OS, iOS, 안드로이드 플랫폼 용으로 컴파일할 때 정의 사용법을 확인할 수 있을 것이다. 그리고 각 플랫폼마다의 샘플 결과물들을 스크린샷으로 확인할 수 있다. 모든 샘플 프로젝트는 위 세션 링크를 클릭해 다운로드 할 수 있다. The simple Delphi FireMonkey application includes a TButton and a TMemo. In the Button’s OnClick event handler the code outputs information about the platform and the compiler defines for each platform. TButton, TMemo가 있는 간단한 델파이 파이어몽키 애플리케이션이 있다. 버튼의 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; 각 플랫폼에서의 결과 스크린 샷 인용하기 이 댓글 링크 다른 사이트에 공유하기 더 많은 공유 선택 사항
Recommended Posts
이 토의에 참여하세요
지금 바로 의견을 남길 수 있습니다. 그리고 나서 가입해도 됩니다. 이미 회원이라면, 지금 로그인하고 본인 계정으로 의견을 남기세요.