写点什么

CMake

用户头像
Changing Lin
关注
发布于: 15 小时前
CMake

Android NDK 是如何使用 CMake 来编译应用的 C 和 C++代码。

  • 通过 Android Gradle 插件的 ExternalNativeBuild

  • 通过直接调用 CMake 将 CMake 与 NDK 搭配使用

1.CMake 工具链文件

工具链文件是用于自定义交叉编译工具链行为的 CMake 文件。用于 NDK 的工具链文件位于 NDK 中的 <NDK>/build/cmake/android.toolchain.cmake 内


2.用法

在 Gradle 之外使用 CMake 进行构建时,工具链文件本身及其参数必须传递给 CMake。例如:

$ cmake \    -DCMAKE_TOOLCHAIN_FILE=$NDK/build/cmake/android.toolchain.cmake \    -DANDROID_ABI=$ABI \    -DANDROID_NATIVE_API_LEVEL=$MINSDKVERSION \    $OTHER_ARGS
复制代码

3.工具链参数

  • ANDROID_ABI:目标 ABI

  • ANDROID_ARM_MODE:指定是为 armeabi-v7a 生成 arm 还是 thumb 指令

  • ANDROID_ARM_NEON:为 armeabi-v7a 启用或停用 NEON。对于 API 级别(minSdkVersion 或 ANDROID_PLATFORM)23 或更高版本,默认为 true,否则为 false。

  • ANDROID_LD:选择要使用的链接器

  • ANDROID_NATIVE_API_LEVEL:ANDROID_PLATFORM 的别名

  • ANDROID_PLATFORM:指定应用或库所支持的最低 API 级别

  • ANDROID_STL:指定要为此应用使用的 STL,默认情况下将使用 c++_static

4.了解 CMake 构建命令

Android Gradle 插件会将用于为每个 ABI 和构建类型执行 CMake 构建的构建参数保存至 cmake_build_command.txt。这些文件位于以下目录中:

<project-root>/<module-root>/.cxx/cmake/<build-type>/<ABI>/
复制代码

以下代码段会显示一个 CMake 参数示例,用于构建面向 armeabi-v7a 架构的 hello-jni 示例的可调试版本。

                    Executable : D:\AppData\Android\Sdk\cmake\3.10.2.4988404\bin\cmake.exearguments : -HD:\StudioProjects\ndk-samples\hello-jniCallback\app\src\main\cpp-DCMAKE_FIND_ROOT_PATH=D:\StudioProjects\ndk-samples\hello-jniCallback\app\.cxx\cmake\debug\prefab\armeabi-v7a\prefab-DCMAKE_BUILD_TYPE=Debug-DCMAKE_TOOLCHAIN_FILE=D:\AppData\Android\Sdk\ndk-bundle\build\cmake\android.toolchain.cmake-DANDROID_ABI=armeabi-v7a-DANDROID_NDK=D:\AppData\Android\Sdk\ndk-bundle-DANDROID_PLATFORM=android-21-DCMAKE_ANDROID_ARCH_ABI=armeabi-v7a-DCMAKE_ANDROID_NDK=D:\AppData\Android\Sdk\ndk-bundle-DCMAKE_EXPORT_COMPILE_COMMANDS=ON-DCMAKE_LIBRARY_OUTPUT_DIRECTORY=D:\StudioProjects\ndk-samples\hello-jniCallback\app\build\intermediates\cmake\debug\obj\armeabi-v7a-DCMAKE_RUNTIME_OUTPUT_DIRECTORY=D:\StudioProjects\ndk-samples\hello-jniCallback\app\build\intermediates\cmake\debug\obj\armeabi-v7a-DCMAKE_MAKE_PROGRAM=D:\AppData\Android\Sdk\cmake\3.10.2.4988404\bin\ninja.exe-DCMAKE_SYSTEM_NAME=Android-DCMAKE_SYSTEM_VERSION=21-BD:\StudioProjects\ndk-samples\hello-jniCallback\app\.cxx\cmake\debug\armeabi-v7a-GNinjajvmArgs : 

Build command args: [] Version: 1
复制代码


5.使用预构建库

请参阅 CMake 手册中关于 IMPORTED 目标的 add_library 文档

6.CMake 中的 YASM 支持

YASM 是 x86 和 x86-64 架构的开源汇编程序,它基于 NASM 汇编程序。

发布于: 15 小时前阅读数: 5
用户头像

Changing Lin

关注

获得机遇的手段远超于固有常规之上~ 2020.04.29 加入

我能做的,就是调整好自己的精神状态,以最佳的面貌去面对那些未曾经历过得事情,对生活充满热情和希望。

评论 (1 条评论)

发布
用户头像
头图是认真的么哈哈哈哈哈哈????快改改
10 小时前
回复
没有更多了
CMake