android.mk编写浅析



 摘自:http://blog.csdn.net/jshazk1989/article/details/6823888#


先写一个简单的Android.mk


LOCAL_PATH := $(call my-dir)             #指定当前目录
   
include $(CLEAR_VARS)                    #引入编译变量

LOCAL_MODULE_TAGS := optional            #编译选项便是在何种情况下编译

LOCAL_SRC_FILES := hello.c               #源文件(可以指定多个) 
 
LOCAL_MODULE := hello                    #编译出来的模块名

LOCAL_MODULE_CLASS := EXECUTABLES        #指定编译之后放置的位置(此处指示放在system/bin下)

include $(BUILD_EXECUTABLE)              #引入编译成可执行文件的规则 



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

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


clear_vas.mk:

##########################################################
## Clear out values of all variables used by rule templates.
###########################################################

LOCAL_MODULE:=                                                                          
LOCAL_MODULE_PATH:=
LOCAL_MODULE_STEM:=
LOCAL_DONT_CHECK_MODULE:=
LOCAL_CHECKED_MODULE:= 
.
.
.
LOCAL_CERTIFICATE:=
LOCAL_SDK_VERSION:=
LOCAL_NDK_VERSION:=
LOCAL_NO_EMMA_INSTRUMENT:=
LOCAL_NO_EMMA_COMPILE:=
LOCAL_PROGUARD_ENABLED:= # '',optonly,full,custom
LOCAL_PROGUARD_FLAGS:=
LOCAL_PROGUARD_FLAG_FILES:=
LOCAL_EMMA_COVERAGE_FILTER:=
LOCAL_MANIFEST_FILE:=
LOCAL_BUILD_HOST_DEX:=
LOCAL_DEX_PREOPT:=
LOCAL_DEX_PREOPT:=

# Trim MAKEFILE_LIST so that $(call my-dir) doesn't need to
# iterate over thousands of entries every time.
# Leave the current makefile to make sure we don't break anything
# that expects to be able to find the name of the current makefile.
MAKEFILE_LIST := $(lastword $(MAKEFILE_LIST))


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

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

有几个选项

user模块只在user下编译
eng模块在eng模式下编译
teststest状态下编译
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下


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值