cmake中文帮助文档
CMake的
在这个页面
使用过Android Studio 2.2及更高版本,可以使用NDK和CMake的 编译C和C ++代码到本机库。Android Studio中,然后构建系统使用Gradle把library打包到APK中
如果您是初次使用CMake的与Android Studio ,去C和C ++代码添加到您的项目学习添加原生资源到项目的基础,创造了CMake的构建脚本,并添加您的CMake项目作为一个gradle依赖。此页面为您提供可以使用自定义您的CMake构建一些额外的信息。
了解CMake的生成命令
当调试CMake的构建问题,它有助于知道对于Android Studio使用特定生成的参数当用交叉编译。
Android Studio中保存它使用用于执行CMake的构建,构建参数在cmake_build_command.txt文件。对于每一个应用程序二进制接口(ABI)您的应用程序的目标,每个构建类型为那些ABI的(即,释放或调试),Android Studio中生成的副本cmake_build_command.txt 用于特定的配置文件。Android Studio中,然后将其生成在以下目录中的文件:
<project-root>/<module-root>/.externalNativeBuild/cmake/<build-type>/<ABI>/
提示:在Android Studio中,您可以快速通过使用搜索快捷键(查看这些文件shift+shift),并进入 cmake_build_command.txt在输入字段。
下面的代码段示出的参数的CMake一个例子来构建的可调试释放hello-jni 样品靶向armeabi-v7a架构。
Executable : /usr/local/google/home/{$USER}/Android/Sdk/cmake/3.6.3155560/bin/cmake
arguments :
-H/usr/local/google/home/{$USER}/Dev/github-projects/googlesamples/android-ndk/hello-jni/app/src/main/cpp
-B/usr/local/google/home/{$USER}/Dev/github-projects/googlesamples/android-ndk/hello-jni/app/.externalNativeBuild/cmake/arm7Debug/armeabi-v7a
-GAndroid Gradle - Ninja
-DANDROID_ABI=armeabi-v7a
-DANDROID_NDK=/usr/local/google/home/{$USER}/Android/Sdk/ndk-bundle
-DCMAKE_LIBRARY_OUTPUT_DIRECTORY=/usr/local/google/home/{$USER}/Dev/github-projects/googlesamples/android-ndk/hello-jni/app/build/intermediates/cmake/arm7/debug/obj/armeabi-v7a
-DCMAKE_BUILD_TYPE=Debug
-DCMAKE_MAKE_PROGRAM=/usr/local/google/home/{$USER}/Android/Sdk/cmake/3.6.3155560/bin/ninja
-DCMAKE_TOOLCHAIN_FILE=/usr/local/google/home/{$USER}/Android/Sdk/ndk-bundle/build/cmake/android.toolchain.cmake
-DANDROID_NATIVE_API_LEVEL=23
-DANDROID_TOOLCHAIN=clang
jvmArgs :
Build arg
构建参数
下表突出重点CMake的构建参数为Android。对于您可以设定标准构建参数列表cmake命令行可执行文件,看CMake的手册。
| 构建参数 | 描述 |
-G <build-system> |
构建类型文件的CMake生成。 对于Android Studio中使用本地代码项目, 如果 |
-DANDROID_ABI <abi> |
目标ABI。 NDK的支持一组的ABI的,如描述ABI管理。此选项类似于 默认情况下,gradle构建你的本地库为单独 如果没有指定的目标ABI,CMake的默认使用 有效的目标名称是:
|
-DANDROID_NDK <path> |
绝对路径到你的主机上安装NDK的根目录。 |
-DCMAKE_LIBRARY_OUTPUT_DIRECTORY <path> |
位置主机CMake的地方放上 LIBRARY的目标文件时所建。 |
-DCMAKE_BUILD_TYPE <type> |
类似于构建类型的NDK-nuild 工具。有效值为Release和Debug。为了简化调试,CMake的不带的Release或Debug版本作为构建的一部分。然而,gradle当它们打包在APK条二进制文件。 |
-DCMAKE_MAKE_PROGRAM <program-name> |
工具来启动本地构建系统。您可以设置值是可执行文件或工具名称的完整路径,如果它在PATH。对于交叉编译采用Android Studio中,这个值被设置为CMake的 ninja与Android SDK捆绑发生器。 |
-DCMAKE_TOOLCHAIN_FILE <path> |
路径android.toolchain.cmake是CMake的使用进行交叉编译的Android文件。通常情况下,该文件位于 $NDK/build/cmake/目录中,其中$NDK是你的主机上的NDK安装目录。有关工具链文件的详细信息,请参阅交叉编译的Android。 |
-DANDROID_NATIVE_API_LEVEL <level> |
这CMake的编译为Android API级别。 |
-DANDROID_TOOLCHAIN <type> |
该CMake的使用编译器工具链。有效值为 clang(默认)和gcc(不推荐)。 |
在摇篮使用cmake变量
一旦你g到您的CMake的项目,您可以配置更改的CMake构建您的本机库的方式一定NDK特定的变量。若要从模块级的参数传递给CMake的build.gradle文件中,使用下面的DSL:
android {
...
defaultConfig {
...
// This block is different from the one you use to link Gradle
// to your CMake or ndk-build script.
externalNativeBuild {
// For ndk-build, instead use ndkBuild {}
cmake {
// Passes optional arguments to CMake.
arguments "-DANDROID_ARM_NEON=TRUE", "-DANDROID_TOOLCHAIN=clang"
// Sets optional flags for the C compiler.
cFlags "-D_EXAMPLE_C_FLAG1", "-D_EXAMPLE_C_FLAG2"
// Sets a flag to enable format macro constants for the C++ compiler.
cppFlags "-D__STDC_FORMAT_MACROS"
}
}
}
buildTypes {...}
productFlavors {
...
demo {
...
externalNativeBuild {
cmake {
...
// Specifies which native libraries to build and package for this
// product flavor. If you don't configure this property, Gradle
// builds and packages all shared object libraries that you define
// in your CMake or ndk-build project.
targets "native-lib-demo"
}
}
}
paid {
...
externalNativeBuild {
cmake {
...
targets "native-lib-paid"
}
}
}
}
// Use this block to link Gradle to your CMake or ndk-build script.
externalNativeBuild {
cmake {...}
// or ndkBuild {...}
}
}
下表描述了一些你可以使用CMake的与NDK时配置变量。
| 变量名 | 参数 | 描述 |
|---|---|---|
ANDROID_TOOLCHAIN |
|
指定编译器工具链的CMake应该使用。 |
ANDROID_PLATFORM |
有关平台名称和相应的Android系统映像的完整列表,请参阅的Android NDK Native API解决方案。 |
指定目标Android平台的名称。例如,
|
ANDROID_STL |
有关选项的完整列表,请助手运行时 默认情况下,CMake的使用 |
指定STL的CMake应该使用。 |
ANDROID_PIE |
|
指定是否使用与位置无关的可执行文件(PIE)。Android的动态链接器支持在Android 4.1(API级别16)和较高的PIE。 |
ANDROID_CPP_FEATURES |
这个变量默认为空。然而,以下是你可以传递参数的几个例子:
|
指定某些C ++功能CMake的需要编译你的本地库,如RTTI(运行时类型信息)和C ++异常时使用。 |
ANDROID_ALLOW_UNDEFINED_SYMBOLS |
|
指定是否如果CMake的遇到不确定的参考,同时建立你的本地库抛出一个未定义的符号错误。要禁用这些类型的错误,把这个变量设为 |
ANDROID_ARM_MODE |
|
指定是否生成在ARM目标二进制文件 |
ANDROID_ARM_NEON |
|
指定的CMake是否应该建立自己的与NEON支持本机库。 |
ANDROID_DISABLE_NO_EXECUTE |
|
指定是否启用NXbit,或不能执行,安全功能。要禁用此功能,通过 |
ANDROID_DISABLE_RELRO |
|
指定是否启用只读搬迁。 |
ANDROID_DISABLE_FORMAT_STRING_CHECKS |
|
指定是否编译格式字符串保护你的源代码。当启用时,如果一个非恒定的格式字符串在所使用的编译器会引发错误 |
报告问题
如果碰上的是不是由于cmake的开源版本的任何问题,通过报告这些android-ndk/ndk GitHub上的问题跟踪器。
https://developer.android.com/ndk/guides/cmake.html
原文
https://developer.android.com/ndk/guides/cmake.html#variables
cmake中文帮助文档的更多相关文章
- DecimalFormat 中的 # 与 0 的区别(中文帮助文档中翻译可能是错误的)
想对数字进行格式化的时候,可能会使用到 java.text.DecimalFormat 类.中文帮助文档中,有如下符号 位置 本地化 含义 0 数字 是 阿拉伯数字 # 数字 是 阿拉伯数字,如果不存 ...
- 强大的矢量图形库:Raphael JS 中文帮助文档及教程
Raphael 是一个用于在网页中绘制矢量图形的 Javascript 库.它使用 SVG W3C 推荐标准和 VML 作为创建图形的基础,你可以通过 JavaScript 操作 DOM 来轻松创建出 ...
- vim中文帮助文档安装
vim自带的帮助手册是英文的, 对平时编程的人来说没有多大阅读困难,在何况还有"星级译王"呢, 但是我猜和我一样连英语四级都愁的大有人,可偏偏就有一帮好心人人将其翻译成了中文, 可 ...
- 【译】StackExchange.Redis中文使用文档
StackExchange.Redis中文使用文档 Intro 最近想深入学习一些 Redis 相关的东西.于是看了看官方的项目StackExchange.Redis,发现里面有一份文档,于是打算翻译 ...
- StackExchange.Redis中文使用文档
StackExchange.Redis中文使用文档 Intro 最近想深入学习一些 Redis 相关的东西.于是看了看官方的项目 StackExchange,发现里面有一份文档,于是打算翻译成中文,方 ...
- Entity Framework Core 中文入门文档
点击链接查看文档: Entity Framework Core 中文入门文档
- django 中文入门文档
django中文入门文档:阅读地址
- [No0000190]vim8安装教程和vim中文帮助文档Vimcdoc安装方法-Vim使用技巧(5)
Vim8.0是近十年来的一次大更新,支持任务.异步I/O.Channels和JSON以及异步计时器.Lambdas 和 Closures等,还包括对GTK + 3的支持.由于ubuntu默认安装的Vi ...
- Plupload上传插件中文帮助文档
Plupload上传插件中文帮助文档 配置参数 实例化一个plupload对象时,也就是 new plupload.Uploader(),需要传入一个对象作为配置参数.后面内容中出现的plupload ...
随机推荐
- js获取指定小时日期格式化
不得不感叹一下,聪明的程序员写的代码真是让人惊奇 找了一圈格式化代码的方式,下面的这个使用了一个 slice 函数,真是厉害 https://stackoverflow.com/questions/4 ...
- Bulma 中的媒体查询
在 Bulma 中将设备分为 6 类:手机.平板.触屏设备.桌面.宽屏和大屏.提供了四个阈值. // sass/utilities/variables.sass $tablet: 769px !def ...
- 关于UI Automation框架
微软提供的UI Automation框架给开发windows平台的自动化测试带来了很大的便利,这里就总结一下相关的代码. 首先,直接使用UI Automation框架,完成一个NotePad的abou ...
- cross validation
k-folder cross-validation:k个子集,每个子集均做一次测试集,其余的作为训练集.交叉验证重复k次,每次选择一个子集作为测试集,并将k次的平均交叉验证识别正确率作为结果.优点:所 ...
- Linux 新建用户、用户组,给用户分配权限
注:内容来自网络 Linux 系统是一个多用户多任务的分时操作系统,任何一个要使用系统资源的用户,都必须首先向系统管理员申请一个账号,然后以这个账号的身份进入系统.用户的账号一方面可以帮助系统管理员对 ...
- UWP&WP8.1 附加属性 和WebView的NavigateToString方法XAML绑定方法
附加属性,即为添加一个没有的属性的. 使用方法和依赖属性相似,个人理解就是特殊形式的依赖属性. 经常的用处,以一个简单的来说,比如一个控件的某一个属性我们想在XAML中给其绑定数据.但是我们在XAML ...
- 【TED演讲】阿帕玛・饶:(幽默的高科技艺术)
身为艺术家和TED Fellow的阿帕玛・饶对熟悉的事物以惊奇的幽默的方式进行再次想像.通过和索伦・普尔兹的合作,她创作出一系列高科技的艺术作品-一个会发邮件的打字机,一个让你在屏幕上消失而跟踪拍摄你 ...
- C语言数据结构-链式栈的实现-初始化、销毁、长度、取栈顶元素、查找、入栈、出栈、显示操作
1.数据结构-链式栈的实现-C语言 //链式栈的链式结构 typedef struct StackNode { int data; struct StackNode *next; } StackNod ...
- P4559 [JSOI2018]列队
\(\color{#0066ff}{ 题目描述 }\) 作为一名大学生,九条可怜在去年参加了她人生中的最后一次军训. 军训中的一个重要项目是练习列队,为了训练学生,教官给每一个学生分配了一个休息位置. ...
- loj #6235. 区间素数个数 min_12.5筛
\(\color{#0066ff}{ 题目描述 }\) 求 \(1\sim n\) 之间素数个数. \(\color{#0066ff}{输入格式}\) 一行一个数 n . \(\color{#0066 ...