Android makefile编写基础

简介: 首先来看一个简单的Android makefile,这个是我上篇文章写的,重新摘出来:LOCAL_PATH:=$(call my-dir)include $(CLEAR_VARS)LOCAL_MODULE_TAGS := engLOCAL_LDLIBS := -L$(SYSROOT)/usr/lib -llog LOCAL_SRC_FILES:= \ ppp.

首先来看一个简单的Android makefile,这个是我上篇文章写的,重新摘出来:

LOCAL_PATH:=$(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE_TAGS := eng
LOCAL_LDLIBS := -L$(SYSROOT)/usr/lib -llog 
LOCAL_SRC_FILES:= \
		ppp.c
	
LOCAL_MODULE:= PPPreboot
include $(BUILD_EXECUTABLE)
#include $(BUILD_SHARED_LIBRARY)
下面对上面的语法进行解析:

LOCAL_PATH:=$(call my-dir) 					 定义了当前模块的相对路径
include $(CLEAR_VARS)      					 清空了当前的环境变量
LOCAL_MODULE_TAGS := eng   					 指定模块在eng模式下才进行编译 
LOCAL_LDLIBS := -L$(SYSROOT)/usr/lib -llog   编译需要的库
LOCAL_SRC_FILES:ppp.c      				     编译所需要的目标源文件,一般都是当前目录下,或者依赖于其它目录下
LOCAL_MODULE:= PPPreboot   					 编译生成该目标的名称,也就是最终的可执行文件
include $(BUILD_EXECUTABLE)				     编译所生成的目标的文件格式 
其中:

my-dir在build/core/definitions.mk定义
CLEAR_VARS在build/core/config.mk定义 

以下就是我之前写的源码,简单的功能。

#include <stdio.h>  
#include <stdlib.h>  
#include <android/log.h>  
#define LOGD(...) __android_log_print(ANDROID_LOG_DEBUG, "keymatch", __VA_ARGS__)  
int main(void)  
{  
    int i ;  
    freopen("/dev/ttyMT0", "a", stdout);setbuf(stdout, NULL);  
    freopen("/dev/ttyMT0", "a", stderr);setbuf(stderr, NULL);  
    LOGD("YYX---->reboot system!!!!!!--->201612.1\n");  
    system("reboot");  
    return 0 ;  
} 
makefile还有源码写完以后我们就可以进行编译了。
首先,需要source build/envsetup.sh  初始化参数和环境变量
接着lunch  对应的平台的版本

接着就拥有了mm、mmm等编译工具
然后对刚刚写的程序进行手动编译: mmm external/test/

编译成功信息如下:

PLATFORM_VERSION_CODENAME=REL
PLATFORM_VERSION=6.0
TARGET_PRODUCT=em_t8350_emmc
TARGET_BUILD_VARIANT=eng
TARGET_BUILD_TYPE=release
TARGET_BUILD_APPS=
TARGET_ARCH=arm
TARGET_ARCH_VARIANT=armv7-a-neon
TARGET_CPU_VARIANT=cortex-a7
TARGET_2ND_ARCH=
TARGET_2ND_ARCH_VARIANT=
TARGET_2ND_CPU_VARIANT=
HOST_ARCH=x86_64
HOST_OS=linux
HOST_OS_EXTRA=Linux-3.13.0-32-generic-x86_64-with-Ubuntu-14.04-trusty
HOST_BUILD_TYPE=release
BUILD_ID=MRA58K
OUT_DIR=out
============================================
PRODUCT_COPY_FILES frameworks/base/data/sounds/effects/ogg/camera_click.ogg:system/media/audio/ui/camera_click.ogg ignored.
PRODUCT_COPY_FILES device/pskyed/em_t8350_emmc/init.recovery.mt8127.rc:root/init.recovery.mt8127.rc ignored.
PRODUCT_COPY_FILES device/pskyed/em_t8350_emmc/handheld_core_hardware.xml:system/etc/permissions/handheld_core_hardware.xml ignored.
make: Entering directory `/mnt/sdb1/yangyx/MT8127_t8350_Debug_Camera_20161121/MT8127_M0_MP8_0407_for_t8350'
build/core/Makefile:614: warning: overriding commands for target `out/target/product/em_t8350_emmc/boot.img'
build/core/Makefile:39: warning: ignoring old commands for target `out/target/product/em_t8350_emmc/boot.img'
No private recovery resources for TARGET_DEVICE em_t8350_emmc
Import includes file: out/target/product/em_t8350_emmc/obj/EXECUTABLES/PPPreboot_intermediates/import_includes
target thumb C: PPPreboot <= external/test/ppp.c
target Executable: PPPreboot (out/target/product/em_t8350_emmc/obj/EXECUTABLES/PPPreboot_intermediates/LINKED/PPPreboot)
target Unpacked: PPPreboot (out/target/product/em_t8350_emmc/obj/EXECUTABLES/PPPreboot_intermediates/PACKED/PPPreboot)
target Symbolic: PPPreboot (out/target/product/em_t8350_emmc/symbols/system/bin/PPPreboot)
Export includes file: external/test/Android.mk -- out/target/product/em_t8350_emmc/obj/EXECUTABLES/PPPreboot_intermediates/export_includes
target Strip: PPPreboot (out/target/product/em_t8350_emmc/obj/EXECUTABLES/PPPreboot_intermediates/PPPreboot)
Install: out/target/product/em_t8350_emmc/system/bin/PPPreboot
make: Leaving directory `/mnt/sdb1/yangyx/MT8127_t8350_Debug_Camera_20161121/MT8127_M0_MP8_0407_for_t8350'

#### make completed successfully (2 seconds) ####

输出的文件就在out/target/product/em_t8350_emmc/system/bin/PPPreboot,用什么手段执行它都可以,就看你的需求了。




目录
相关文章
|
5月前
|
Android开发
[√]android makefile
[√]android makefile
54 0
|
11月前
|
Android开发
【Android构建篇】MakeFile语法中 := 和 = 的区别
使用:= 在Makefile中使用 := 赋值方式定义变量时,如果该变量定义中包含了其他变量的引用,那么这些引用所表示的值将在变量定义时即被展开。也就是说,子变量会被立即展开,并赋值给父变量。
85 0
|
11月前
|
Shell C语言 Android开发
【Android构建篇】MakeFile语法&lt; 3 &gt;
对于一个看不懂Makefile构建文件规则的人来说,这个Makefile语法和shell语法是真不一样,但是又引用了部分shell语法,可以说是shell语法的子类,Makefile语法继承了它。 和shell语法不一样,这个更难一点,而且不太容易懂,所以后续还会持续更新这篇文章。
69 0
|
11月前
|
存储 Shell 编译器
【Android构建篇】MakeFile语法&lt; 2 &gt;
对于一个看不懂Makefile构建文件规则的人来说,这个Makefile语法和shell语法是真不一样,但是又引用了部分shell语法,可以说是shell语法的子类,Makefile语法继承了它。 和shell语法不一样,这个更难一点,而且不太容易懂,所以后续还会持续更新这篇文章。
91 0
|
11月前
|
Shell 编译器 C语言
【Android构建篇】MakeFile语法&lt; 1 &gt;
对于一个看不懂Makefile构建文件规则的人来说,这个Makefile语法和shell语法是真不一样,但是又引用了部分shell语法,可以说是shell语法的子类,Makefile语法继承了它。 和shell语法不一样,这个更难一点,而且不太容易懂,所以后续还会持续更新这篇文章。
125 0
【Android构建篇】MakeFile语法&lt; 1 &gt;
|
11月前
|
Unix 编译器 Linux
【Android篇】MakeFile初识
C语言中,我们使用visual studio开发软件时候,写程序开始时候都会创建一个project项目文件,然后在文件里面编译 .h 和 .c 的文件。 在Linux中,有一个叫做make的指令,就相当于C语言的IDE,我们只需要敲make指令,make会去查看当前的Makefile或makefile(小写编译优先级更高)文件。 不过我们创建的项目不叫project,而是称为Makefile,打开一个make源程序包,发现很多Makefile的文件,说明里面有很多的项目,并且Makefile管理着这些依赖关系。
73 0
|
搜索推荐 Java Linux
Android基础入门教程
Android是一种基于Linux的自由及开放源代码的操作系统,Android 分为四个层,从高层到低层分别是应用程序层、应用程序框架层、系统运行库层和Linux内核层。
204 0
|
Android开发
android用异步操作AsyncTask编写文件查看器
android用异步操作AsyncTask编写文件查看器
107 0
|
XML 存储 移动开发
Android基础 | 关于Activity你应该明白的一切
Activity 作为一个老生常谈的话题,它是我们刚接触Android开发就遇到,虽然已有一段时间开发经验,但谈起完全搞懂Activity相关,不敢妄言,故结合个人理解及书籍参考,简单总结一下 Activity基础相关知识,其中也留出了一些有意思的问题。
142 0
|
XML 存储 安全
Android四大组件全面解析,夯实基础。(下)
Android四大组件 lay a solid foundation 夯实基础
167 0