Android 编译脚本小解析。(include-path-for 解析)
来源:互联网 发布:怎么制作抽奖软件 编辑:程序博客网 时间:2024/05/17 09:03
之前没怎么好好看过 Android build系统中的mk,找个命令包开刀和大家分享一下吧
include-path-for
define include-path-for #定义命令包, n 由调用者传递进来, 这个在 build/core/pathmap.mk
$(foreach n,$(1),$(patsubst $(n):%,%,$(filter $(n):%,$(pathmap_INCL))))
endef
// pathmap_INCL 在 build/core/pathmap.mk 文件中有定义,最后使用的时候可以看到
【函数内实现的解析】
foreach 遍历, patsubst 字符串替换, filter 过滤函数
【函数调用】
这里以external\dbus\bus 下的Android.mk 调用为例:
...
LOCAL_C_INCLUDES:= \
$(call include-path-for, dbus)
...
调用命令包 include-path-for ,只有一个入参是 dbus
1. foreach
入参 dbus 替换 $(1), 那么根据 foreach 的语法,就是把字符串 dbus 保持到 n 中
然后交给 $(patsubst $(n):%,%,$(filter $(n):%,$(pathmap_INCL))) 处理
2. patsubst
字符串替换, 这个函数需要3个参数 $(n):%, %, $(filter $(n):%,$(pathmap_INCL))
参数1 翻译一下就是 “dbus:任意长字符串”
参数2 任意长字符串
参数3 是一个字符过滤函数。(下面就需要先处理这个函数了)
3. filter
在 pathmap_INCL 中找类型是 “dbus:任意长” 的字符串 // pathmap_INCL 列在下面了,发现没有符合的字符串
所以参数3 最后得到的是空
回到一下函数2,这里得到的就是一个空。
继续回到函数1,这里最后得到的就是 dbus
所以
LOCAL_C_INCLUDES:= \
$(call include-path-for, dbus)
最后结果是
LOCAL_C_INCLUDES:= \
dbus
好吧太绕口了,多看看吧,
pathmap_INCL := \
bootloader:bootable/bootloader/legacy/include \
camera:system/media/camera/include \
corecg:external/skia/include/core \
dbus:external/dbus \
frameworks-base:frameworks/base/include \
frameworks-native:frameworks/native/include \
graphics:external/skia/include/core \
libc:bionic/libc/include \
libdrm1:frameworks/base/media/libdrm/mobile1/include \
libhardware:hardware/libhardware/include \
libhardware_legacy:hardware/libhardware_legacy/include \
libhost:build/libs/host/include \
libm:bionic/libm/include \
libnativehelper:libnativehelper/include \
libpagemap:system/extras/libpagemap/include \
libril:hardware/ril/include \
libstdc++:bionic/libstdc++/include \
libthread_db:bionic/libthread_db/include \
mkbootimg:system/core/mkbootimg \
opengl-tests-includes:frameworks/native/opengl/tests/include \
recovery:bootable/recovery \
system-core:system/core/include \
audio-effects:system/media/audio_effects/include \
audio-utils:system/media/audio_utils/include \
wilhelm:frameworks/wilhelm/include \
wilhelm-ut:frameworks/wilhelm/src/ut \
speex:external/speex/include
- Android 编译脚本小解析。(include-path-for 解析)
- android lichee编译脚本解析
- android lichee编译脚本解析
- android lichee编译脚本解析
- android lichee编译脚本解析
- android lichee编译脚本解析
- uboot编译脚本解析
- Android Path 解析
- Android Path 解析
- Android的path解析
- 使用小path解析XMl文档
- Android 初始化脚本语法解析
- Android 初始化脚本语法解析
- Android 初始化脚本语法解析
- Android 初始化脚本语法解析
- Android init.rc脚本解析
- Android-Gradle基础脚本解析
- android5.0(Lollipop)编译脚本envsetup解析
- Codeforces Round #179 (Div. 2) C. Greg and Array
- Export 3D model to JSON in Blender on Fedora
- 在线广告的exploration/exploitation trade-off(勘探和开采问题)
- 各大推荐引擎资料汇总
- 单机模式处理大数据,搜集一些好用的开源利器
- Android 编译脚本小解析。(include-path-for 解析)
- sencha 对齐文字
- 前端神器-网站图片抓取精灵V1.0正式发布
- codeforces Round #179 (Div. 2) 296A 296B 295A 295B 295C
- 第五章、 Linux 常用网络指令
- hdu 1176
- 多进程 多线程
- 黑马程序员_.net简介&变量简介&转义字符
- 实验二十五 SCVMM物理服务器裸机部署