サイトアイコン Embarcadero RAD Studio, Delphi, & C++Builder Blogs

10.2.3の新機能:iOSとAndroid用のCMakeのサポート

Author: h.mohri

この記事は、DAVID MILLINGTONによるNew in 10.2.3: CMake Support for iOS and Androidの抄訳です。

 

前回C++コンパイラのCMakeサポートに関してご紹介致しました。
CMakeとは何か、Win32とWin64の両方でWindows用の使い方について説明しました。
https://community.embarcadero.com/blogs/entry/new-in-10-2-3-cmake-support-ja

今回はCMakeをiOS, Androidなどのモバイル用に使用した方法のご紹介です。これは、CMakeを呼び出す方法と、CMakeLists.txtファイルにモバイル固有の情報を書き込む方法の両方です。

CMake for iOS and Android

CMakeでWindowsをターゲットをビルドするときは、Win32またはWin64のC/C++コンパイラを指定します。
一度利用したいコンパイラをCMakeが検出し取り出します

[crayon-66398671da773687756142/]

これは、同じプラットフォームを構築してターゲット設定しているためです。この場合Windows上に構築し、Windowsをターゲットにしています。 しかし、iOS32,iOS64,Androidの場合、目標としているプラットフォームとは異なるプラットフォームをクロスコンパイルで構築しています。

クロスコンパイルするには、使用するコンパイラを指定する代わりに、ツールチェーンを指定します。 これはCMakeにコンパイラの使い方とモバイルプラットフォームの使い方を伝えるcmakeファイルで、クロスコンパイルの完全な情報が含まれています。 これらのツールチェーンファイルは、各プラットフォームに固有の追加のデプロイメントオプション(スプラッシュ画面イメージなど)も設定します。

C++Builderのクロスコンパイルツールチェインファイルは、使用するコンパイラと同じ名前を持っています。たとえば、bccaarmはbccaarm.cmakeです。 使用するコマンドラインを次に示します。

iOS32:

[crayon-66398671da788576648783/]

iOS64:

[crayon-66398671da78b109571520/]

Android:

[crayon-66398671da78c763049268/]

Windows用コマンドよりもさらに入力が少なくて済みます!

これは、CMakeLists.txtファイルが置かれているフォルダからCMakeを起動していることを前提としています。 それが他の場所にある場合は、コマンドラインの最後に “… -G Ninja ..”や “… -G Ninja c:\my\path”などのパスを指定することができます。

CMakeLists.txtのモバイル固有の情報

ターゲットは、モバイルデバイスにプロジェクトを展開できるという点でWindowsと異なり、アプリケーションバンドルまたはパッケージに収まる多数のファイルを展開することが含まれます。paserverは通常どおりに実行するので、paserverがインストールされていることを、コマンドラインを実行する前にIDEでデプロイ確認できます。

CMakeの固有のモバイルであることを伝えるために使用できるいくつかの「マクロと変数」があります。

iOS

Android

ドキュメントにはリストがあります。 すべてのマクロと変数を使用できます。 いくつかの変数には、CMakeLists.txtファイル内のターゲット固有の設定を行うために読むことができる固定値があらかじめ設定されています。

ターゲットに基づいたCMakeLists.txtの設定

CMakeLists.txtファイルは一般的なプロジェクトの説明ですが、Androidをターゲットに設定する際に使用されるAndroidマニフェスト情報などを指定する情報が必要です。

設定方法はEMBT_TARGET変数の値に基づいてifステートメントを追加することです。 Androidプラットフォーム用に設定の場合

[crayon-66398671da78e007194534/]

EMBT_TARGETは次のいずれかです。

これらを使い、各プラットフォーム情報を設定に追加することができます。

関連

 

 

次回のSummary

 

モバイルバージョンを終了