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 安装目录。您可以使用此信息从其他 Shell 脚本甚至您自己的 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
修饰符或为N
选择较小的值,例如 2。 -
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 显示了每种可能的设置组合的结果。
清单设置 | 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` 等效于 `APP_OPTIM=release`,并使用 `-O2` 编译。`NDK_DEBUG=1` 等效于 `Application.mk` 中的 `APP_OPTIM=debug`,并使用 `-O0` 编译。有关 `APP_OPTIM` 的更多信息,请参阅Application.mk。
例如,命令行语法如下所示
$ ndk-build NDK_DEBUG=1
要求
您需要 GNU Make 4 才能使用 ndk-build 或 NDK。NDK 包含其自身的 GNU Make 副本,并且将在您未将$GNUMAKE
环境变量设置为指向不合适的 make 之前使用该副本。
JSON 编译数据库
在 NDK r18 及更高版本中,ndk-build 可以生成JSON 编译数据库。
您可以使用ndk-build compile_commands.json
生成数据库而无需构建代码,或者使用ndk-build GEN_COMPILE_COMMANDS_DB=true
在构建的同时生成数据库作为副作用。