ndk-build スクリプトは、NDK の Make ベースのビルドシステムを使用するプロジェクトをビルドします。ndk-build が使用する Android.mk と Application.mk の構成については、それぞれのリンク先に詳しいドキュメントがあります。
内部動作
ndk-build スクリプトを実行することは、次のコマンドを実行することと同等です。
$GNUMAKE -f <ndk>/build/core/build-local.mk <parameters>
$GNUMAKE は GNU Make 3.81 以降を指し、<ndk> は NDK インストール ディレクトリを指します。この情報を使用して、他のシェル スクリプトまたは独自の Makefile から ndk-build を呼び出すことができます。
コマンドラインから呼び出す
ndk-build スクリプトは NDK インストール ディレクトリの最上位にあります。このスクリプトをコマンドラインから実行するには、アプリ プロジェクト ディレクトリ内、またはそのディレクトリの下でスクリプトを呼び出します。次に例を示します。
$ cd <project> $ <ndk>/ndk-build
この例では、<project> はプロジェクトのルート ディレクトリを指し、<ndk> は NDK をインストールしたディレクトリを指します。
オプション
ndk-build に対するパラメータはすべて、実質的に NDK ビルド スクリプトを実行する GNU make コマンドに直接渡されます。ndk-build とオプションを ndk-build <option> の形式で組み合わせます。次に例を示します。
$ ndk-build clean
使用できるオプションは次のとおりです。
-
clean - 以前に生成したバイナリをすべて削除します。
注: Mac OS X では、並列実行数が多い状況で
ndk-build cleanを実行すると、次のメッセージを含むビルドエラーが発生する可能性があります。rm: fts_read: No such file or directory
この問題を回避するには、
-jN修飾子の使用を避けるか、2 のような小さな値をNに指定します。 -
V=1 - ビルドを開始し、ビルドコマンドを表示します。
-
-B - 完全な再ビルドを強制的に実施します。
-
-B V=1 - 完全な再ビルドを強制的に実施し、ビルドコマンドを表示します。
-
NDK_LOG=1 - NDK 内部ログメッセージを表示します(NDK 自体のデバッグに使用します)。
-
NDK_DEBUG=1 - デバッグ可能ビルドを強制的に実施します(表 1 を参照)。
-
NDK_DEBUG=0 - リリースビルドを強制的に実施します(表 1 を参照)。
-
NDK_HOST_32BIT=1 - 常に 32 ビットモードのツールチェーンを使用します。
-
NDK_APPLICATION_MK=<file> NDK_APPLICATION_MK変数がポイントする特定のApplication.mkファイルを使用してビルドします。-
-C <project> <project>で指定されたプロジェクト パスのネイティブ コードをビルドします。これは、ターミナルでその場所へのcdを実行したくない場合に便利です。
デバッグ可能ビルドとリリースビルド
NDK_DEBUG オプションおよび(必要に応じて)AndroidManifest.xml を使用して、デバッグビルドにするかリリースビルドにするか、最適化関連の動作を有効にするか、シンボルを含めるか、を指定できます。表 1 に、指定可能な組み合わせの結果を示します。
表 1. NDK_DEBUG(コマンドライン)と android:debuggable(マニフェスト)の組み合わせの結果。
| マニフェスト設定 | NDK_DEBUG=0 | NDK_DEBUG=1 | NDK_DEBUG 指定なし |
|---|---|---|---|
| android:debuggable="true" | デバッグ、シンボル、最適化*1 | デバッグ、シンボル、最適化なし*2 | (NDK_DEBUG=1 と同じ) |
| android:debuggable="false" | リリース、シンボル、最適化 | リリース、シンボル、最適化なし | リリース、シンボルなし、最適化*3 |
*2:
ndk-gdb を実行するときのデフォルト。*3: デフォルトのモード。
注: 「NDK_DEBUG=0」は Application.mk の「APP_OPTIM=release」と同等であり、「-O2」でコンパイルされます。「NDK_DEBUG=1」は「APP_OPTIM=debug」と同等であり、「-O0」でコンパイルされます。「APP_OPTIM」について詳しくは、Application.mk をご覧ください。
コマンドラインの構文の例は次のとおりです。
$ ndk-build NDK_DEBUG=1
要件
一般的に、ndk-build または NDK を使用するには、GNU Make 4 が必要です。NDK は GNU Make の独自のコピーを含んでおり、$GNUMAKE 環境変数が不適切な Make をポイントするように設定されていない限り、そのコピーを使用します。
JSON コンパイル データベース
NDK r18 以降では、ndk-build は JSON コンパイル データベースを生成できます。
ndk-build compile_commands.json を使用してコードをビルドせずにデータベースを生成するか、ndk-build GEN_COMPILE_COMMANDS_DB=true を設定して副次効果としてデータベースをビルドおよび生成することができます。