Android.mk文件简单分析
Android.mk文件简单分析
一个Android.mk文件用来向编译系统描写叙述须要编译的源码。详细来说:该文件是GNUMakefile的一小部分。会被编译系统解析一次或多次。
能够在每个Android.mk中定义一个或多个模块,也能够在几个模块中使用同一个源码文件。
每一个模块属下列类型之中的一个:
1)APK程序。一般的Android程序,编译打包生成apk文件
2)JAVA库,java类库,编译打包生成jar文件
3) C\C++应用程序,可运行的C\C++应用程序
4)C\C++静态库,编译生成C\C++静态库,并打包成.a文件
5)C\C++共享库, 编译生成共享库(动态链接库),并打包成.so, 有且仅仅有共享库才干被安装/拷贝到应用软件(APK)包中。
一个简单的样例
一个简单的"hello world",比方以下的文件:
sources/helloworld/helloworld.c
sources/helloworld/Android.mk
对应的Android.mk文件会像以下这样:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := helloworld
LOCAL_SRC_FILES := helloworld.c
include $(BUILD_SHARED_LIBRARY)
简单说明:
1。LOCAL_PATH := $(call my-dir)。一个Android.mk
file首先必须定义好LOCAL_PATH变量。它用于在开发树中查找源文件。在这个样例中,宏函数‘my-dir’,由编译系统提供。用于返回当前路径(即包括Android.mk文件的文件夹)。
2,include $( CLEAR_VARS)。CLEAR_VARS由编译系统提供((能够在
android 安装文件夹下的/build/core/config.mk文件看到其定义,为 CLEAR_VARS:=$(BUILD_SYSTEM)/clear_vars.mk)),指定让GNU
MAKEFILE为你清除很多LOCAL_XXX变量(比如 LOCAL_MODULE,LOCAL_SRC_FILES, LOCAL_STATIC_LIBRARIES,
等等...),除LOCAL_PATH。这是必要的,由于全部的编译控制文件都在同一个GNU MAKE运行环境中。全部的变量都是全局的。
3,LOCAL_MODULE := helloworld,LOCAL_MODULE变量必须定义,以标识你在Android.mk文件里描写叙述的每一个模块。名称必须是唯一的,并且不包括不论什么空格。
注意编译系统会自己主动产生合适的前缀和后缀,换句话说。一个被命名为'foo'的共享库模块。将会生成'libfoo.so'文件。
4,LOCAL_SRC_FILES := helloworld.c。LOCAL_SRC_FILES变量必须包括将要编译打包进模块中的C或C++源码文件。注意,你不用在这里列出头文件和包括文件,由于编译系统将会自己主动为你找出依赖型的文件;只列出直接传递给编译器的源码文件就好。
其它经常使用的还有:
5,LOCAL_C_INCLUDES:可选变量,表示头文件的搜索路径。
默认的头文件的搜索路径是LOCAL_PATH文件夹。
演示样例:LOCAL_C_INCLUDES
:= sources/foo或LOCAL_C_INCLUDES := $(LOCAL_PATH)/../foo
6,TARGET_ARCH:目标 CPU平台的名字;TARGET_PLATFORM:Android.mk解析的时候,目标
Android平台的名字。ARGET_ARCH_ABI:临时仅仅支持两个 value,armeabi和
armeabi-v7a
7。LOCAL_STATIC_LIBRARIES:表示该模块须要使用哪些静态库。以便在编译时进行链接。
8,LOCAL_SHARED_LIBRARIES: 表示模块在执行时要依赖的共享库(动态库),在链接时就须要,以便在生成文件时嵌入其对应的信息。
9,LOCAL_LDLIBS: 编译模块时要使用的附加的链接器选项。
10。LOCAL_ARM_MODE:默认情况下,
arm目标二进制会以 thumb的形式生成(16
位)。你能够通过设置这个变量为 arm假设你希望你的 module是以
32 位指令的形式
11,LOCAL_CFLAGS: 可选的编译器选项,在编译
C 代码文件的时候使用
12,include $(call all-subdir-makefiles):返回一个位于当前'my-dir'路径的子文件夹中的全部Android.mk的列表。
----------------------
另外:
在Android.mk文件里,还能够指定最后的目标安装路径,用LOCAL_MODULE_PATH和LOCAL_UNSTRIPPED_PATH来指定。不同的文件系统路径用下面的宏进行选择:
TARGET_ROOT_OUT:表示根文件系统out/target/product/generic/root。
TARGET_OUT:表示system文件系统out/target/product/generic/system。
TARGET_OUT_DATA:表示data文件系统out/target/product/generic/data。
OUT_DIR:代码project编译时的out生成文件夹
PRODUCT_OUT:映象生成文件夹
Android.mk文件简单分析的更多相关文章
- Android JNI入门第四篇——Android.mk文件分析
ndroid.mk文件是在使用NDK编译C代码时必须的文件,Android.mk文件中描述了哪些C文件将被编译且指明了如何编译.掌握Android.mk文件的编写主要是掌握其里头将要使用的一些关键字, ...
- NDK中android.mk文件的简单介绍和第三方库的调用
先贴一个样例,然后解释一下: LOCAL_PATH:= $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := mydjvuapi SRC_FILE_ ...
- Android.mk 文件语法详解
0. Android.mk简介: Android.mk文件用来告知NDK Build 系统关于Source的信息. Android.mk将是GNU Makefile的一部分,且将被Build Syst ...
- Android.mk 文件语法详解 转:http://blog.sina.com.cn/s/blog_602f8770010148ce.html
0. Android.mk简介: Android.mk文件用来告知NDK Build 系统关于Source的信息. Android.mk将是GNU Makefile的一部分,且将被Build Syst ...
- Android JNI的Android.mk文件语法详解
Android.mk简介: Android.mk文件用来告知NDK Build 系统关于Source的信息. Android.mk将是GNU Makefile的一部分,且将被Build System解 ...
- Android编译系统(Android.mk文件详解)
[Android-NDK(Native Development Kit) docs文档] NDK提供了一系列的工具,帮助开发者快速开发C(或C++)的动态库,并能自动将so和java应用一起打包成a ...
- Android.mk文件语法规范 原文
序言:------------- 此文档旨在描述Android.mk文件的语法,Android.mk文件为Android NDK(原生开发)描述了你C/C++源文件.为了明白下面的内容,你必须已经阅读 ...
- 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编译系统 ...
随机推荐
- CCF CSP 201409-4 最优配餐
CCF计算机职业资格认证考试题解系列文章为meelo原创,请务必以链接形式注明本文地址 CCF CSP 201409-4 最优配餐 问题描述 栋栋最近开了一家餐饮连锁店,提供外卖服务.随着连锁店越来越 ...
- ASP.NET:MVC模板化机制
模版化的核心是定制ViewEngine.完整的模板化必须实现3个功能:1.网站的多套模版(razor)支持 2.模版的多样式(style)支持. 3.按需实现模版:没有实现的加载默认模版. 我们除了要 ...
- ExampleConfigurationSectionHandler
ExampleConfigurationSectionHandler.cs using System; using System.Collections.Generic; using System.C ...
- Action(8):Error -27728:Step download timeout(120 seconds)has expired when downloading
Action(8):Error -27728:Step download timeout(120 seconds)has expired when downloading 出现如下图所示对话框上的 ...
- 全文搜索引擎 Elasticsearch (二) 使用场景
1.场景—:使用Elasticsearch作为主要的后端 传统项目中,搜索引擎是部署在成熟的数据存储的顶部,以提供快速且相关的搜索能力.这是因为早期的搜索引擎不能提供耐用的存储或其他经常需要的功能 ...
- Redis的一些配置
Redis的一些配置 daemonize 如果需要在后台运行,把该项设置为yes,默认为no pidfile 配置多个pid的地址,默认在/var/run/redis.pid bind 绑定ip,设置 ...
- CSS 显示或隐藏子元素
很多时候我们仅仅只是想让鼠标移动入某个元素,然后显示出某个元素. 大多数博客的标题或内容都是:使用CSS实现鼠标悬停在一行上,显示某些元素 很遗憾,这是错误的,鼠标悬停后,尽管CSS标准中有定义此种方 ...
- 【GO基础】神奇的iota特殊常量
最近在学习GO语言,然后发现有一个特殊常量是以前没有接触过的,比较感兴趣,这里给大家介绍一下. iota,特殊常量,可以被认为是一个可以被编译器修改的常量. 核心概念:iota在const关键字出现时 ...
- Openstack-开发基础 stevedore学习
在给openstack-N版加路由的时候发现怎么都无法搞定,原来现在用这个模块来处理了 stevedore是用来实现动态加载代码的开源模块.它是在OpenStack中用来加载插件的公共模块.可以独立于 ...
- python 全排列
itertools模块现成的全排列: for i in itertools.permutations('abcd',4): print ''.join(i) 相关全排列算法: def perm(l): ...