`
lovecontry
  • 浏览: 1033459 次
文章分类
社区版块
存档分类
最新评论

Makefile 理解(4) 【Android.mk 浅析 模块编译Makefile编写】

 
阅读更多

终于将C++代码porting到了bootloader中,唯一的收获就是熟悉了Makefile,有工厂的公司伤不起啊,每次都得先做一些东西满足工厂端测试的需求,为了能够做到工厂在boot中测试的要求,经过与芯片公司讨论,只有将C++弄到了boot中,真是一个很二的决定boot最终做到了2M比有些kernel还要大。不过老板要这么做就硬着头皮做了现在做成了心中还蛮高兴的,原来被逼之后人的潜能还是蛮大的。

对于Makefile中所用的函数还在研究中,之后会写一写主要函数的用法。

因为从事着android驱动开发所以天天要接触Android.mk。
1、在运行 . build/envsetup.sh 会生成一些操作例如:chooseproduct mmm
2、运行 chooseproduct project 选择所要编译的工程
3、运行make,回去编译整个android source

怎么说到了编译Android Source的方法呢

切入主题 先写一个简单的Android.mk

以上的Android.mk 会编译出一个hello的可执行文件,并放入system/bin

LOCAL_PATH : 指定目录,以上是一般用法指示当前目录(my-dir函数是Android编译时. build/envsetup.sh命令生成的 能够获取当前目录的路径)

CLEAR_VARS: android有自己的一套代码编译规则跟编译选项等变量的定义,此变量会引入,实际是android/build/core下的clear_vas.mk,

clear_vas.mk

在编译C/C++代码时候常用的变量定义

LOCAL_MODULE 指示当前编译出来的模块名

LOCAL_MODULE_TAGS 标识在什么情况下去编译起模块

有几个选项

user 模块只在user下编译
eng 模块在eng模式下编译
tests test状态下编译
optional 此模块在所有版本下都编译
即 TARGET_BUILD_VARIANT=eng 编译TAGS为eng和optional的模块

LOCAL_SRC_FILES 表示编译出此模块需要的源程序 可以有多个

LOCAL_C_INCLUDE 如果不去调用标准库头文件,跟当前目录的头文件,则需要在此指定头文件的位置,在此指定头文件的目录。

LOCAL_STATIC_LIBRARIES: 指定需要连接的静态库像一些比较通用的标准库就无需指定了

LOCAL_SHARED_LIBRARIES: 指定需要连接的动态库

最后include $(BUILD_XXX) 表示编译出来的模块类型,有三种

BUILD_EXECUTABLE 编译成可执行的模块 build/core/host_executable.mk
BUILD_STATIC_LIBRARY 编译成静态库 build/core/host_static_library.mk
BUILD_SHARED_LIBRARY 编译成动态库 build/core/host_shared_library.mk
LOCAL_MODULE_CLASS 标识了所编译模块最后放置的位置,如果不指定,不会放到系统中,之后放在最后的obj目录下的对应目录中。

LOCAL_MODULE_CLASS := ETC #表示放于system/etc目录

LOCAL_MODULE_CLASS := EXECUTABLES #放于/system/bin

LOCAL_MODULE_CLASS := SHARED_LIBRARIES #放在/system/lib下


build/core下有很多编译的全局的mk,如编译C/C++规则definitions.mk ......


再说一下编译内核模块的Makefile


编译模块的Mkefile会被读取两次,Makefile从命令行调用时候KERNELRELEASE尚未设置,

在运行到KDIR时即会指向一个内核构造树,

在运行$(MAKE)时 会会第二次运行make命令,此时设置obj-m 构造真正的内核模块


分享到:
评论

相关推荐

    android编译系统makefile(Android.mk)写法

    android编译系统makefile(Android.mk)写法 Android.mk文件首先需要指定LOCAL_PATH变量,用于查找源文件。由于一般情况下 Android.mk和需要编译的源文件在同一目录下,所以定义成如下形式: LOCAL_PATH:=$(call my-...

    android编译系统makefile(Android.mk)写法.pdf

    android编译系统makefile(Android.mk)写法.pdf

    Android_makefile编译系统_Android.mk_文件语法规范

    Android_makefile编译系统_Android.mk_文件语法规范 对Android.mk的讲解,共9页,值得一看。

    android编译系统makefile(Android.mk)写法[参考].pdf

    android编译系统makefile(Android.mk)写法[参考].pdf

    android编译系统makefile(Android.mk)写法参照.pdf

    android编译系统makefile(Android.mk)写法参照.pdf

    android编译系统makefile(Android.mk)写法扫描.pdf

    android编译系统makefile(Android.mk)写法扫描.pdf

    android.mk文件介绍

    自己整理的一个android.mk文件的介绍,看了之后你就基本能自己写android.mk了 可能比较乱 但是很详细

    Android.mk

    android编译系统的makefile文件Android.mk写法如下 (1) Android.mk文件首先需要指定LOCAL_PATH变量,用于查找源文件。由于一般情况下 Android.mk和需要编译的源文件在同一目录下,宏函数“my-dir”右编译系统提供的...

    Android.mk文件语法规范及使用模板.pdf

    一个Android.mk file用来向编译系统描述你的源代码。具体来说:-该文件是GNU Makefile的一小部分,会被编译系统解析一次或更多次的build系统。因此,您应尽量减少您声明的变量,不要认为某些变量在解析过程中不会被...

    android编译系统makefile(Android.mk)写法.docx

    android编译系统makefile(Android.mk)写法.docx

    Android.mk文件分析

    从对Makefile一无所知开始,折腾了一个多星期,终于对Android.mk有了一...而对初学者来说,更需要明白的可能是,Android如何让使用脚本的人从Makefile语法当中解放出来,简单地按照上面的三大步就可以编译出任何模块。

    Android.bp文件说明.pdf

    在 Android7.0 以前,Android 都是使用 make 来组织各模块的编译,对应的编译 配置文件就是 Android.mk。在 Android7.0 开始,Google 引入了 ninja 和 kati 来编译,为 啥引入 ninja?因为随着 Android 越来越庞大,...

    Android.mk 生成代码v2

    为了生成android.mk方便,写了一个小工具(windows环境下),完成自动遍历给定目录下的源码文件和需要包含的目录,可一次给定一个目录也可以一次给定多个目录,GetAndroidMK.exe 目录1 目录2 ,源代码可以参考...

    Android.mk文件中文版

    一句一句翻译的NDK Android.mk帮助文档,帮助英语比我还差的哥们熟悉NDK的makefile的编写方法。个人觉得翻译的还算比较准确,因为基本上也都是测试过的,是根据实践参考文档翻译得来。可能是目前为止翻译的最通顺...

    linux Makefile 多个*.h、*.c 编译.ko文件参考

    mtk_hif_sdio-objs := linux/hif_sdio.o  mtk_hif_sdio-objs += linux/hif_sdio_chrdev.o  mtk_hif_sdio-objs += linux/osal.o

    FFMPEG编译Android.mk文件

    FFMPEG编译Android.mk文件

    浅析Android.mk

    Android.mk将是GNU Makefile的一部分,且将被Build System解析一次或多次。 所以,请尽量少的在Android.mk中声明变量,也不要假定任何东西不会在解析过程中定义。 Android.mk文件语法允许我们将Source打包成一个...

    Android.bp正确姿势添加宏控制编译指南

    我们知道 Android.mk采用Makefile的语言,所以为了控制条件编译和多版本适配,我们可以在不同产品直接在Android.mk中采用Makefile语言控制编译。虽然我们也可以通过Android的内置工具androidmk将Android.mk转换为...

Global site tag (gtag.js) - Google Analytics