Android.mk参数解释
--------------------
下面对Android.mk 中经常出现的变量进行讲解
-------------------- 这些变量,你会经常在Android.mk文件中见到,下面以字表表的顺序列出来,并进行一一讲解其作用。 LOCAL_- 这个变量会在每个模块(module,也可以解释为程序). 当出现 include $(CLEAR_VARS)变量的时候,它们当初设置的变量,会清空。在你使用的大部分变量中,它存在于模块中的定义都会像 LOCAL_variables(variables 为变量的名字) PRIVATE_- 这个是定义私有的变量。 只有有特别的模块中,这个变量才有起效。 HOST_ 和 TARGET_- 定义编译生成的文件是运行在什么平台的。 不要随便使用 HOST_ 或者是 TARGET_ 变量在你的makefile(对应的文件是Android.mk文件)文件中。 BUILD_ 和 CLEAR_VARS 变量 , 它们是已经预先定义的模块makefile文件。下面提供一个简单的例子: CLEAR_VARS 和 BUILD_HOST_PACKAGE ----------------------------------------正式讲解----------------------- 变量名: 描述:
LOCAL_AAPT_FLAGS
LOCAL_ACP_UNAVIAILABLE
LOCAL_ADDITIONAL_JAVA_DIR
LOCAL_AIDL_INCLUDES
LOCAL_ALLOW_UNDEFINED_SYMBOLS
LOCAL_ARM_MODE ARM使用的模式
LOCAL_ASFLAGES
LOCAL_ASSET_DIR
-----------------------------------------------
LOCAL_ASSERT_FILES Android.mk中定义的模块需要包含 'include $(BUILD_PACKAGE)' ,一般形式:
LOCAL_ASSET_FILES += $(call find-subdir-assets)
--------------------------------- LOCAL_BUILD_MODULE_STEM
----------------------------------------------------- LOCAL_C_INCLUDES 当编译C/C++文件的时候,这个变量指定的路径是用于编译器查找头文件的。例子:
LOCAL_C_INCLUDES += extlibs/zlib-1.2.3
-----------------------------------------------------
---------------------
LOCAL_CC 如果你想使用第三方的C编译器,编译当前的程序。就用LOCAL_CC设置第三方编译的位置
------------------------------- LOCAL_CERTIFICATE 签名用的证书的名字 ,也可以用于指明特别的签名证书(例如自己创建的证书) LOCAL_CFLAGS 如果需要给C/C++编译传递自己的参数,那么你就需要这个变量了。例子:
LOCAL_CFLAGS += -DLIBBUILTS_NATIVE=1 LOCAL_CLASSPATH
LOCAL_COMPRESS_MODULE_SYMBOLS
LOCAL_COPY_HEADERS 用于复制头文件,需要和LOCAL_COPY_HEADRES_TO 变量一起使用 LOCAL_COPY_HEADERS_TO 需要和LOCAL_COPY_HEADERS 变量一起使用,用于复制头文件
-----------------------------------------------------
LOCAL_CPP_EXTENSION 如果你的C++文件的后序不是cpp,而是其它的,你就需要用这个变量定义一下了。例子:
LOCAL_CPP_EXTENSION := .cc
----------------------------------------------------- -------------------------------
LOCAL_CPPFLAGS 这个用于传递编译指令到唯一的C++编译器中。例子:
LOCAL_CPPFLAGS += -ffriend-injection LOCAL_CPPFLAGS 在编译器接收的指令中,迟于LOCAL_CFLAGS ,所以你可以用它来覆盖LOCAL_CFLAGS定义的指令
---------------------------------- LOCAL_CXX 如果你想用第三方的C++编译器,编译当前的程序或者是模块,你可以使用这个变量,和变量LOCAL_CC的使用方法一样。 LOCAL_DX_FLAGS
LOCAL_EXPORT_PACKAGE_RESOURCES
----------------------------------
LOCAL_FORCE_STATIC_EXECUTABLE 如果你编译的程序,需要被链接成静态文件,不包含动态链接,作如下的设置: LOCAL_FORCE_STATIC_EXECUTABLE := true 。 这样编译出来的程序可以在没有动态库支持的根目录下面运行。
-------------------------------- LOCAL_GENERATED_SOURCES 后面的定义的变量,会被自动转换成你所需要的文件的格式 LOCAL_INSTRUMENTATION_FOR
LOCAL_INSTRUMENTATION_FOR_PACKAGE_NAME
LOCAL_INTERMEDIATE_SOURCES
LOCAL_INTERMEDIATE_TARGETS
LOCAL_IS_HOST_MODULE LOCAL_JAR_MANIFEST 定义jar文件需要用到的manifest文件 LOCAL_JARJAR_RULES
---------------------------------
LOCAL_JAVA_LIBRARIES 当编译生成java程序或者是库文件的时候,LOCAL_JAVA_LIBRARIES, 定义的是要被编译成程序或者是库的文件。下面来一个简单的例子,需要链接的库文件为core 和 framework.
LOCAL_JAVA_LIBRARIES := core framework 注意: 在Android.mk的模块中设置 LOCAL_JAVA_LIBRARIE ,一般不需要(或者不允许)当编译一个APK 程序,模块中包含了 "include $(BUILD_PACKAGE)"。 那么这些必要的核心文件会自动包含进去。
--------------------------------------- LOCAL_JAVA_RESOURCE_DIRS
LOCAL_JAVA_RESOURCE_FILES
LOCAL_JNI_SHARED_LIBRARIES
-------------------------------------------
LOCAL_LDFLAGS 你可以往链接器(linker)传递一些自己的指令,通过设置 "LOCAL_LDFLAGS"。不过要时刻记住,传递到链接器的参数是非常重要的,必须要事件进行一些测试。 LOCAL_LDLIBS 用于指定一些第三方的动态库或者是静态库文件,需要用-lxxx格式,这些文件不在你的编译计划中。例子:
LOCAL_LDLIBS += -lcurses -lpthread
LOCAL_LDLIBS += -Wl, -z,origin
--------------------------------- ------------------------------------
LOCAL_MODULE "LOCAL_MODULE" 是一个你定义在Android.mk文件中的一个程序的名字。例如,库文件"libkjs", 相应的对应为: LOCAL_MODULE 是 "libkjs"(编译的平台会自动给它加上后序,例如 .so, .dylib, .dll)。对于 APK程序,将会使用LOCAL_PACKAGE_NAME 而不是 LOCAL_MODULE ------------------------------------ -------------------------------------
LOCAL_MODULE_PATH 告诉编译平台,如何把编译出来的程序或者是模块放到特定的位置。如果你需要定义这个变量,确保你同时定义了"LOCAL_UNSTRIPPED_PATH" 如果你编译生成的文件是可执行文件或者是动态库,这样就可以确保没有去符号(unstripped)链接的二进制文件有位置可去了。如果你没有进行定义,就有可能发生错误----------------------------------------- LOCAL_MODULE_STEM
---------------------------------------------
LOCAL_MODULE_TAGS 用于指定生成的程序是什么类型的。有以下的几个变量:
user: 将会使用 user/userdebug模式去编译程序
eng: 将会使用 eng模式去编译程序
tests: 将会使用testing模式编译程序
optional: 不建议使用这个模式 --------------------------------------- LOCAL_NO_DEFAULT_COMPILER_FLAGS
LOCAL_NO_EMMA_COMPILER
LOCAL_NO_EMMA_INSTRUMENT
LOCAL_NO_STANDARD_LIBRARIES
LOCAL_OVERRIDES_PACKAGES
LOCAL_PACKAGE_NAME 用于设置APK程序的名字,例如: Dialer, Contacts
--------------------------------------------
LOCAL_POST_PROCESS_COMMAND 用于生成本机的可执行文件,当程序被编译好后,你可以给它传递一条命令。下面是例子:
module := $(HOST_OUT_EXECUTABLES)/$(LOCAL_MODULE)
LOCAL_POST_PROCESS_COMMAND := /Developer/Tools/Rez -d __DARWIN__ -t APPL\
-d __WXMAC__ -o $(module) Carbon.r
--------------------------------------------------- --------------------------------------
LOCAL_PREBUILT_EXECUTABLES 当Android.mk文件中包含 $(BUILD_PREBUILT) 或者是 $(BUILD_HOST_PREBUILT), 你可以使用这个变量去定义,你要复制到哪个目录。这样它就可以自动被复制到特定的目录了。
------------------------------------ LOCAL_PREBUILT_JAVA_LIBRARIES LOCAL_PREBUILT_LIBS 解释和LOCAL_PREBUILT_EXECUTABLES 一样。 LOCAL_PREBUILT_OBJ_FILES
LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES
LOCAL_PRELINK_MODULE ---------------------
LOCAL_REQUIRED_MODULES 不知道怎样解释,直接上英文:
Set LOCAL_REQUIRED_MODULES to any number of whitespace-separated module names, like "libblah" or "Email". If this module is installed, all of the modules that it requires will be installed as well. This can be used to, e.g., ensure that necessary shared libraries or providers are installed when a given app is installed.
-------------------------------- LOCAL_RESOURCE_DIR
LOCAL_SDK_VERSION 设置本地的sdk版本号 ------------------------------
LOCAL_SHARED_LIBRARIES 定义的内容为要链接的动态库的名字,不需要后序。例子:
LOCAL_SHARED_LIBRARIES := \
libutils \
libui \
libaudio \
libexpat \
libsgl
--------------------------------- ----------------------
LOCAL_SRC_FILES 编译系统会查找 定义在LOCAL_SRC_FILES后面的值,去查找需要编译的源代码,例如 *.c, *.cpp, *.y, *.l, *.java。对于lex 和 yacc文件,需要定义一下传递的指令。如果是C/cpp,它会自动处理。如果包含的文件在二级目录下面,也可以直接进行定义。例子:
LOCAL_SRC_FILES := \
file1.cpp \
dir/file2.cpp
---------------------------- LOCAL_STATIC_JAVA_LIBRARIES LOCAL_STATIC_LIBRARIES 解释和LOCAL_SHARED_LIBRARIES大致一样。不过这次要链接的是静态库文件。 LOCAL_UNISTALLABLE_MODULE
--------------------------
LOCAL_UNSTRIPPED_PATH 定义放置没有去符号链接的文件的位置,如果你同时定义了LOCAL_MODULE_PATH ,而编译的程序是可执行程序或者是动态库文件。那么出现错误是在所难免的。
---------------------------- -------------------------------------
LOCAL_WHOLE_STATIC_LIBRARIES 用于把静态库链接到程序中,而不允许链接器去掉其中没有用的符号链接。如果你想把静态库编译进动态库中,而在静态库中已经包含了动态库中的符号链接,这个时候就特别有用了。
例子:
LOCAL_WHOLE_STATIC_LIBRARIES := \
libsqlite3_android
------------------------------ -----------------------------------------
LOCAL_YACCFLAGS 用于把编译指令传递给yacc模块。例子:
LOCAL_YACCFLAGS := -p kjsyy
--------------------------------------- OVERRIDE_BUILD_MODULE_PATH
Android.mk参数解释的更多相关文章
- Android.mk具体解释
概述 Android.mk文件用来向编译系统描写叙述怎样编译你的源码.更确切地说,该文件事实上就是一个小型的Makefile.由于该文件会被NDK的编译工具解析多次,因此应该尽量降低源码中声明 ...
- Android.mk文件官方使用说明
本页介绍了 ndk-build 所使用的 Android.mk 编译文件的语法. 概览 Android.mk 文件位于项目 jni/ 目录的子目录中,用于向编译系统描述源文件和共享库.它实际上是编译系 ...
- Android.mk 基本应用
如果是在android源码里面编译我们自己的应用,就需要这个android.mk文件,这个文件就告诉android系统应用如何来编译这个应用以及这个应用它所依赖哪些文件等等信息.我对android.m ...
- Android NDK开发之Android.mk文件
Android NDK开发指南---Android.mk文件 博客分类: Android NDK开发指南 Android.mk文件语法详述 介绍: ------------ 这篇文档是用来描述你的 ...
- 【转】Android.mk文件语法规范(Android.mk File)
原文网址:http://blog.csdn.net/smfwuxiao/article/details/8530742 1.Android.mk文件概述 Android.mk文件用来告诉NDK编译系统 ...
- Android NDK开发指南---Application.mk文件和android.mk文件
https://android.googlesource.com/platform/development/+/donut-release/ndk/docs/OVERVIEW.TXT https:// ...
- android.mk android源码编译
http://www.cnblogs.com/chenbin7/archive/2013/01/05/2846863.html Android.mk简单分析 2013-01-05 22:51 by . ...
- Android.mk文件语法规范及使用模板
Android.mk文件语法详述 介绍:------------这篇文档是用来描述你的C或C++源文件中Android.mk编译文件的语法的,为了理解她们我们需要您先看完docs/OVERVIEW.h ...
- NDK 开发(Android.mk配置)
在我写这篇文章的时候,Android Studio已经是2.3版本了,已经集成CMake 编译工具, 用户只需在 新建项目的时候,添加选项(Include C++ support),Andr ...
随机推荐
- UVA 534 - Frogger(kruskal扩展)
UVA 534 - Frogger 题目链接 题意:给定一些点.如今要求一条路径从第一个点能跳到第二个点,而且这个路径上的最大距离是最小的 思路:利用kruskal算法,每次加最小权值的边进去,推断一 ...
- DELPHI学习---类和对象(五篇)
Classes and objects(类和对象) 类(或者类类型)定义了一个结构,它包括字段(也称为域).方法和属性:类的实例叫做对象:类的字段.方法和属性被称为它的部件(components)或成 ...
- thinkphp3.2
1.安装WAMPServer,到D:\wamp\. 2.下载ThinkPHP3.2.2核心版.解压缩后,放到D:\wamp\www\MyWeb\.打开浏览器,输入网址:http://localhost ...
- VSTO学习笔记(一)VSTO概述
原文:VSTO学习笔记(一)VSTO概述 接触VSTO纯属偶然,前段时间因为忙于一个项目,在客户端Excel中制作一个插件,从远程服务器端(SharePoint Excel Services)上下载E ...
- Extjs 3.4 和 web SSH(Ajaxterm)-howge-ChinaUnix博客
Extjs 3.4 和 web SSH(Ajaxterm)-howge-ChinaUnix博客 Extjs 3.4 和 web SSH(Ajaxterm) 2013-04-07 15:20:17 ...
- Extjs4 RowEditing 的使用和更新方法
如何灵活快速的掌握RowEditing组件的应用,应大家的要求,今天给大家具体讲下该组件的使用. 1.创建 var rowEditing = Ext.create('Ext.grid.plugin.R ...
- Hibernate 配置详解(7)
hibernate.order_updates: Hibernate文档中提到,该配置用于在刷新一级缓存,提交UPDATE的时候,按照每类对象的主键顺序排序后再提交,可以在高并发情况下减少事务死锁的可 ...
- Android动绘图标——I am not a gif maker,I am a developer
最早在git上发现一个非常酷眩的动绘图标效果: https://github.com/xuyisheng/tickplusdrawable 不得不说,国外的程序猿在细节的考虑上,确实比我们要好非常多, ...
- hdu1876(dp)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1876 题意:问机器人到达终点的过程中最多有几次完全消耗完能量,消耗完这么多次能量的方式有几种. 分析: ...
- 蓝桥杯软件学院webserver,android