作者:郭孝星
微博:郭孝星的新浪微博
博客:http://blog.csdn.net/allenwells
Github:https://github.com/AllenWells
一 Application.mk文件的作用和特点
作用:描述应用程序中所需要的模块(静态库或动态库)。
位置:Application.mk通常放在PROJECT/jni/Applicatio.mk,PROJECT指的是项目路径。
二 Application.mk文件的变量
2.1 APP_PROJECT_PATH
必选变量,并且会给出应用程序工程的根目录的一个绝对路径。
2.2 APP_MODULES
可选变量,如果没有定义,这个模块名字就被定义在Android.mk文件的LOCAL_MODULE中,NDK将由Android.mk中声明的默认模块编译,并且包含所有的子文件(Makefile文件),NDK会自动计算模块依赖。如果定义了,它必须是一个空格分隔的模块列表。
2.3 APP_OPTM
可选变量,用来定义release或debug,在编译应用程序模块的时候,可以用来改变优先级。release模式是默认的,并且会生成高度优化的二进制代码。debug模式生成的是未优化的二进制代码,也可以检测很多的bug,也可以用调试。
注意:可以调试release和debug版二进制,但release版构建倾向于调试回话中提供较少信息,一些变量被优化且不能被检测,代码重新排序可能导致代码步进变得困难,堆栈跟踪可能不可靠。
2.4 APP_CFLAGS
一个C编译器开关集合,在编译任意模块的任意C或C++源代码时传递。它可以用于改变一个给定的应用程序需要依赖的模块的构建,而不是修改它自身的Android.mk文件。
2.5 APP_BUILD_SCRIPT
默认,NDK构建系统将在 (APPPROJECTPATH)/jni下寻找一个名为Android.mk的文件。即,对于这个文件(APP_PROJECT_PATH)/jni/Android.mk
如果你想重载这个行为,你可以定义APP_BUILD_SCRIPT指向一个不同的构建脚本。一个非绝对路径将总是被解析为相对于NDK顶级目录的路径。
2.6 APP_ABI
默认情况下,NDK的编译系统根据 “armeabi” ABI生成机器代码。可以使用APP_ABI 来选择一个不同的ABI。
举例
在ARMv7的设备上支持硬件FPU指令。可以使用APP_ABI := armeabi-v7支持IA-32指令集,可以使用APP_ABI := x86同时支持这三种,可以使用APP_ABI := armeabi armeabi-v7a x86。
2.7 APP_STL
默认情况下,NDK构建系统提供由Android系统给出的最小C++运行时库(/system/lib/libstdc++.so)的C++头文件。 然而,NDK带有另一个C++实现,你可以在你自己的应用程序中使用或链接它。定义APP_STL可以作以下选择:
APP_STL := stlport_static static STLport library
APP_STL := stlport_shared hared STLport library
APP_STL := system default C++ runtime library
版权声明:本文为博主原创文章,未经博主允许不得转载。