Android Makefile中常用函数说明
filter
语法:$(filter key1 key2,$(VAR))
功能:
从 VAR 中将包含有key1或者key2的过滤出来。
例如:
1 | VAR = a b c d, key1=a,key2=e |
filter-out
语法:$(filter-out key1 key2,$(VAR))
功能:
从 VAR 中将包含有key1或者key2的过滤掉,保留其他的。
例如:
1 | VAR = a b c d, key1=a,key2=e |
call
语法:$(call VARIABLE,PARAM,PARAM,...)
功能:
在执行时,将参数PARAM
依次赋给临时变量$(1),$(2),...
。然后再对VARIABLE
展开后的表达式进行处理。
例如:
1 | define FUNC1 |
inherit-product
使用如下:
1 | $(call inherit-product, device/google/atv/products/atv_base.mk) |
表示引入 device/google/atv/products/atv_base.mk
文件并执行,和 include
有点像,区别在于多处理了几件事情:
- 1、继承通过参数传入的
Makefile
文件中的所有变量; - 2、在
.INHERITS_FROM
变量中记录下这些继承关系; - 3、在
ALL_PRODUCTS
变量中标识出当前操作的Makefile
文件已经被访问过了(以免重复访问)。
具体可以参考下边连接,或者去看函数定义,源码在:build/core/product.mk
。
参考:《Difference between
call inherit-product
andinclude
in AOSP makefiles?》
inherit-product-if-exists
如下:
1 | $(call inherit-product-if-exists, frameworks/base/data/sounds/AudioTv.mk) |
功能和 inherit-product
一样,只是调用时候检查下文件是否存在,存在就加载,否则直接跳过。
ifeq/ifneq
判断两个参数是否相等/不相等(Android.mk
中没有 ||
或 &&
操作)。
1 | ifeq ($(MTK_LIVETV_SUPPORT),true) |
ifdef/ifndef
判断是否有定义某个值。
1 | ifndef ANDROID_CFG_FILES_FOLDER |
打印信息
1 | $(info string) |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Jona's Blog!