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

Posted by on in Blogs

この記事は、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が検出し取り出します

-- Win32:
cmake -DCMAKE_C_COMPILER=bcc32x.exe -DCMAKE_CXX_COMPILER=bcc32x.exe -G Ninja

-- Win64:
cmake -DCMAKE_C_COMPILER=bcc64.exe -DCMAKE_CXX_COMPILER=bcc64.exe -G Ninja

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

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

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

iOS32:

cmake -DCMAKE_TOOLCHAIN_FILE="<BDS>\cmake\bccios32.cmake" -G Ninja

iOS64:

cmake -DCMAKE_TOOLCHAIN_FILE="<BDS>\cmake\bccios64.cmake" -G Ninja

Android:

cmake -DCMAKE_TOOLCHAIN_FILE="<BDS>\cmake\bccaarm.cmake" -G Ninja

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

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

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

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

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

iOS

  • マクロ:デバイスファミリ(iPhoneやiPadなど), サポートされるデバイスの向き, バックグラウンドモード, 配備が必要な追加ファイルが含まれています。 これらはすべてプロジェクトオプションの設定と同等です。
  • 変数:アプリケーション名,SDK,証明書,プロビジョニングプロファイル,バンドル名,カメラの使用状況などのinfo.plistファイルに格納される多数のアイテム。 任意のinfo.plistオプションや、アイコンと画像ファイルを表示します。

Android

  • マクロ:classes.dexに追加するjarファイル。 パーミッション; および展開する追加ファイル。
  • 変数:プロジェクトの場所,KeyStoreの情報(パスワード、エイリアスなど), サービス,ラベル,バージョン,インストール場所などの情報を明示する。 スプラッシュ画像, スタイル, アイコンと画像ファイルなど

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

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

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

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

if(EMBT_TARGET STREQUAL Android)
  // ... Android-specific CMake config here
endif()

EMBT_TARGETは次のいずれかです。

  • "Android"
  • "iOS32"
  • "iOS64"
  • "Windows"

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

関連

 

 

次回のSummary

  • iOSまたはAndroid向けにビルドするときに使用するツールチェーンファイルを指定
  • CMakeLists.txtファイルで、EMBT_TARGETをチェックし、それを使ってデプロイメントやmanifest/info.plistなどのターゲット固有の設定

 



About
Gold User, No rank,
Delphi / C++Builder blogger

Comments

Check out more tips and tricks in this development video: