CMake: Android NDK ツールチェーンバージョンを自在に操る - CMAKE_ANDROID_NDK_TOOLCHAIN_VERSION 解説


CMAKE_ANDROID_NDK_TOOLCHAIN_VERSION は、Android NDK でクロスコンパイルを行う際に、使用するツールチェーンのバージョンを指定するために使用される CMake 変数です。NDK r19 以降では、この変数は clang に設定するか、設定しない必要があります。

用途

この変数は、以下の用途に使用されます。

  • Clang ツールチェーン (NDK r19 以降でデフォルト) を使用する
  • NDK が自動的に選択する最新の GCC ツールチェーンを使用しないようにする
  • 特定のバージョン (例:GCC 4.9) のツールチェーンを強制的に使用する

設定方法

CMAKE_ANDROID_NDK_TOOLCHAIN_VERSION は、CMake の CMakeLists.txt ファイル内で設定できます。以下の例をご覧ください。

set(CMAKE_ANDROID_NDK_TOOLCHAIN_VERSION 4.9)

この例では、NDK r19 より前のバージョンを使用している場合、GCC 4.9 ツールチェーンが使用されます。

NDK r19 以降

NDK r19 以降では、CMAKE_ANDROID_NDK_TOOLCHAIN_VERSIONclang に設定するか、設定しない必要があります。設定しない場合、NDK は自動的に最新の Clang ツールチェーンを選択します。

  • この変数は、CMake 3.7 以降でのみ使用できます。
  • CMAKE_ANDROID_NDK_TOOLCHAIN_VERSION は、CMAKE_ANDROID_ARCH_ABI 変数で指定された ABI に対応するツールチェーンのみを選択します。
  • この説明は、プログラミングの初心者向けに分かりやすく解説することを目的としています。


例 1: GCC 4.9 ツールチェーンを使用する

cmake_minimum_required(VERSION 3.7)

set(CMAKE_TOOLCHAIN_FILE path/to/your/toolchain.cmake)

set(CMAKE_ANDROID_NDK_TOOLCHAIN_VERSION 4.9)

project(myproject)

add_executable(myprogram main.c)

この例では、toolchain.cmake ファイルで CMAKE_ANDROID_NDK_TOOLCHAIN_VERSION 変数を設定する必要があります。

例 2: 最新の Clang ツールチェーンを使用する

cmake_minimum_required(VERSION 3.19)

set(CMAKE_TOOLCHAIN_FILE path/to/your/toolchain.cmake)

project(myproject)

add_executable(myprogram main.c)

この例では、NDK r19 以降を使用している場合、最新の Clang ツールチェーンが自動的に選択されます。

例 3: 特定の ABI に対応するツールチェーンを指定する

cmake_minimum_required(VERSION 3.7)

set(CMAKE_TOOLCHAIN_FILE path/to/your/toolchain.cmake)

set(CMAKE_ANDROID_ARCH_ABI armeabi-v7a)
set(CMAKE_ANDROID_NDK_TOOLCHAIN_VERSION 4.9)

project(myproject)

add_executable(myprogram main.c)

この例では、armeabi-v7a ABI に対応する GCC 4.9 ツールチェーンが使用されます。

  • toolchain.cmake ファイルは、NDK に付属の build/cmake/android.toolchain.cmake ファイルをベースに作成できます。


代替方法

以下の代替方法を検討することができます。

CMAKE_TOOLCHAIN_FILE を使用する

CMAKE_TOOLCHAIN_FILE 変数は、CMake にカスタムツールチェーンファイルを使用させるために使用されます。このファイル内で、CMAKE_ANDROID_NDK_TOOLCHAIN_VERSION 変数を含む任意の CMake 変数を設定できます。

cmake_minimum_required(VERSION 3.7)

set(CMAKE_TOOLCHAIN_FILE path/to/your/toolchain.cmake)

project(myproject)

add_executable(myprogram main.c)

toolchain.cmake ファイルには、以下の内容を含めることができます。

set(CMAKE_ANDROID_NDK_TOOLCHAIN_VERSION 4.9)

NDK r19 以降の Clang ツールチェーンを使用する

cmake_minimum_required(VERSION 3.19)

set(CMAKE_TOOLCHAIN_FILE path/to/your/toolchain.cmake)

project(myproject)

add_executable(myprogram main.c)

ANDROID_ABI 環境変数を使用する

ANDROID_ABI 環境変数は、NDK が使用する ABI を指定するために使用されます。この変数を設定することで、NDK は対応するツールチェーンを自動的に選択します。

export ANDROID_ABI=armeabi-v7a
cmake_minimum_required(VERSION 3.7)

project(myproject)

add_executable(myprogram main.c)

NDK の build/cmake/android.toolchain.cmake ファイルを編集する

NDK の build/cmake/android.toolchain.cmake ファイルを編集することで、デフォルトのツールチェーンバージョンを変更できます。これは、すべてのプロジェクトで同じツールチェーンを使用したい場合に役立ちます。

  • NDK の build/cmake/android.toolchain.cmake ファイルを編集する場合は、NDK のバージョンアップ時に変更が失われる可能性があることに注意してください。
  • ANDROID_ABI 環境変数を使用する場合は、設定した ABI が NDK でサポートされていることを確認してください。
  • NDK r19 以降の Clang ツールチェーンを使用する場合は、NDK が r19 以降であることを確認してください。
  • CMAKE_TOOLCHAIN_FILE を使用する場合は、toolchain.cmake ファイルが適切に設定されていることを確認してください。
  • 上記の代替方法は、それぞれ長所と短所があります。プロジェクトの要件に応じて適切な方法を選択してください。