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文件简单分析的更多相关文章

  1. Android JNI入门第四篇——Android.mk文件分析

    ndroid.mk文件是在使用NDK编译C代码时必须的文件,Android.mk文件中描述了哪些C文件将被编译且指明了如何编译.掌握Android.mk文件的编写主要是掌握其里头将要使用的一些关键字, ...

  2. NDK中android.mk文件的简单介绍和第三方库的调用

    先贴一个样例,然后解释一下: LOCAL_PATH:= $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := mydjvuapi SRC_FILE_ ...

  3. Android.mk 文件语法详解

    0. Android.mk简介: Android.mk文件用来告知NDK Build 系统关于Source的信息. Android.mk将是GNU Makefile的一部分,且将被Build Syst ...

  4. 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 ...

  5. Android JNI的Android.mk文件语法详解

    Android.mk简介: Android.mk文件用来告知NDK Build 系统关于Source的信息. Android.mk将是GNU Makefile的一部分,且将被Build System解 ...

  6. Android编译系统(Android.mk文件详解)

    [Android-NDK(Native Development Kit)  docs文档] NDK提供了一系列的工具,帮助开发者快速开发C(或C++)的动态库,并能自动将so和java应用一起打包成a ...

  7. Android.mk文件语法规范 原文

    序言:------------- 此文档旨在描述Android.mk文件的语法,Android.mk文件为Android NDK(原生开发)描述了你C/C++源文件.为了明白下面的内容,你必须已经阅读 ...

  8. Android NDK开发之Android.mk文件

    Android NDK开发指南---Android.mk文件 博客分类: Android NDK开发指南   Android.mk文件语法详述 介绍: ------------ 这篇文档是用来描述你的 ...

  9. 【转】Android.mk文件语法规范(Android.mk File)

    原文网址:http://blog.csdn.net/smfwuxiao/article/details/8530742 1.Android.mk文件概述 Android.mk文件用来告诉NDK编译系统 ...

随机推荐

  1. input文本框 输入限制三则

    其一,只允许输入数字和小数点. <input onKeypress="return (/[\d.]/.test(String.fromCharCode(event.keyCode))) ...

  2. 认识loadrunner及相关性能参数

    认识loadrunner及相关性能参数 LoadRunner,是一种预测系统行为和性能的负载测试工具.通过以模拟上千万用户实施并发负载及实时性能监测的方式来确认和查找问题,LoadRunner能够对整 ...

  3. oracle中vsize和length

    其实LENGTH与VSIZE这两个函数联系不大,区别很大.虽然都是“取长度”,但是LENGTH函数结果是“有多少个字符”,VSIZE结果是“需要多少bytes”.简单看一下这两个函数. 1.创建表T并 ...

  4. NetworkX 使用(二)

    官方教程 博客:NetworkX %pylab inline import networkx as nx Populating the interactive namespace from numpy ...

  5. Kotlin in Action 笔记

    Kotlin 参考 官网 reference kotlin实战 Try Kotlin Kotlin China Github 简介 Kotlin是一门把Java平台作为目标的新的编程语言.它简洁.安全 ...

  6. JAVAEE——SSH项目实战04:联系人添加、列表显示和修改

    作者: kent鹏 转载请注明出处: http://www.cnblogs.com/xieyupeng/p/7159337.html 一.联系人添加 1.添加页面设计    linkman/list. ...

  7. Oracle 默认的几个登陆用户名和密码

    默认用户有这么几个,system,sys,scott,hr ,一般scott 和hr 作为你的练习用户.system的默认密码是 manager sys的默认密码是 change_on_install ...

  8. [xsy2913]enos

    题意:一棵树,点有$0,1,2$三种颜色,支持路径修改颜色和查询点所在同色连通块的大小 lcm太可怕了,于是去问了sk,得到一个优质做法 考虑lct维护子树信息,$vs_{x,i}$为$x$的虚儿子中 ...

  9. HTML5区块和大纲算法

    原文链接: Using HTML sections and outlines - Mozilla Developer Network 每集HTML5+CSS3网页布局教程-2大纲算法 HTML5标准带 ...

  10. 详解Android基本布局

    一.线性布局 LinearLayout又称为线性布局,是一种非常常用的布局.这个布局会将它包含的控件在线性方向上依次排列.我们可以通过指定它的orientation属性来决定它是垂直方向排列还是水平方 ...