mk文件解析

本文详细介绍了Android.mk文件中条件语句的使用,包括ifeq、ifneq、ifdef和ifndef,并提供了相关示例。同时,探讨了makefile中的filter、strip和findstring函数的应用,帮助读者掌握Android.mk的编译配置技巧。
摘要由CSDN通过智能技术生成
  • LOCAL_PATH := $(call my-dir)

每个Android.mk文件必须以定义LOCAL_PATH为开始。它用于在开发tree中查找源文件。
宏my-dir 则由Build System提供。返回包含Android.mk的目录路径。

  • include $(CLEAR_VARS)

CLEAR_VARS 变量由Build System提供。并指向一个指定的GNU Makefile,由它负责清理很多LOCAL_xxx.
例如:LOCAL_MODULE, LOCAL_SRC_FILES, LOCAL_STATIC_LIBRARIES等等。但不清理LOCAL_PATH.
这个清理动作是必须的,因为所有的编译控制文件由同一个GNU Make解析和执行,其变量是全局的。所以清理后才能避免相互影响。

  • LOCAL_PACKAGE_NAME :=

当前APK应用的名称(具有唯一性)(有源码)

  • LOCAL_MODULE :=

当前模块的名称(具有唯一性)(无源码)
LOCAL_MODULE模块必须定义,以表示Android.mk中的每一个模块。名字必须唯一且不包含空格。 Build
System会自动添加适当的前缀和后缀。例如,foo,要产生动态库,则生成libfoo.so.
但请注意:如果模块名被定为:libfoo.则生成libfoo.so. 不再加前缀。

  • LOCAL_MODULE_TAGS :=

当前模块所包含的标签,可以包含多标签,可能值为debug,eng,user,development或optional(默认值)
- user: 指该模块只在user版本下才编译
- eng: 指该模块只在eng版本下才编译
- tests: 指该模块只在tests版本下才编译
- optional:指该模块在所有版本下都编译

  • LOCAL_MODULE_PATH :=

表示模块编译结果将要存放的目录
如:编译到/vendor/app/下
#PRODUCT_OUT=TOP + '/out/target/product/' + TARGET_PRODUCT
LOCAL_MODULE_PATH := $(PRODUCT_OUT)/vendor/app
如:编译到/system/app/下
#TARGET_OUT := $(PRODUCT_OUT)/$(TARGET_COPY_OUT_SYSTEM)
LOCAL_MODULE_PATH := $(TARGET_OUT)/app

  • LOCAL_PRIVILEGED_MODULE :=

= true 表示app应用在目录/system/priv-app/下
= false 表示app应用在目录/system/app/下(默认)

  • LOCAL_DEX_PREOPT :=

= false 表示不需要在编译过程中做odex优化,即不编译oat目录

  • LOCAL_SRC_FILES :=

LOCAL_SRC_FILES变量必须包含将要打包如模块的C/C++ 源码。
不必列出头文件,build System 会自动帮我们找出依赖文件。
缺省的C++源码的扩展名为.cpp. 也可以修改,通过LOCAL_CPP_EXTENSION。
LOCAL_SRC_FILES := $(call all-java-files-under, src)————有源码
LOCAL_SRC_FILES := $(patsubst $(LOCAL_PATH)/%,%,$(shell find $(LOCAL_PATH) -name "*.apk"))————无源码

  • LOCAL_STATIC_LIBRARIES :=

当前模块在静态链接时需要的库名

  • LOCAL_SHARED_LIBRARIES :=

当前模块在运行时依赖的动态库名

  • LOCAL_STATIC_JAVA_LIBRARIES :=

当前模块依赖的Java静态库

  • LOCAL_JAVA_LIBRARIES :=

当前模块依赖的Java共享库

  • LOCAL_STATIC_ANDROID_LIBRARIES :=

当前模块依赖的Android原生包

  • LOCAL_CERTIFICATE :=

签署当前应用的证书名称,比如platform
PRESIGNED————使用apk原生的签名
platform————使用平台签名

  • LOCAL_OVERRIDES_PACKAGES :=

使某apk不会加入到编译系统中,不会生成.apk。

  • include $(BUILD_PACKAGE)

BUILD_PACKAGE:编译打包成APK文件
BUILD_STATIC_LIBRARY:用它来编译生成C\C++静态库(打包成.a文件)
BUILD_SHARED_LIBRARY :指向一个 GNU Makefile 脚本(应该就是在 build/core目录下的 shared_library.mk),用它来编译生成共享库(动态链接库.so)
BUILD_EXECUTABLE:编译C/C++应用程序

  • include $(call all-makefiles-under,$(LOCAL_PATH))

加载当前目录下的所有makefile文件,all-makefiles-under会返回一个位于当前’my-dir’路径的子目录中的所有Android.mk的列表

1、makefile条件语句

ifeq ($(变量名), 变量值 )
	........
else ifeq ($(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值