Android.mk 分析android buid工程需要的makefile知识点总结

 

1.0 make -C /home/wangxiancan/android -f build/core/main.mk all_modules

   -C 表示进入到某目录 执行(解析)其中的makefile

   -f  表示将后面的文件当做makefile文件解析 (make命令默认只识别如Makefile命名的文件,不过你会发现-C后面目录下已经有一个makefile了,并且这个makefile只一句话:include build/core/main.mk,那这个-f 选项是不是重复了呢????)

2.0 makefile  基本上就三个东西  依赖关系,命令规则,变量和函数,它的执行顺序,多线程解析的,可不是想shell脚本一样执行,而是直接更加目标文件,查找依赖关系,然后执行命令规则生成文件,里面唯一可以执行的,就是命令规则,在这里面可以用shell脚本的命令,可以调用shell里面的语法,至于 makefile中的变量和函数,也只有在这个命令规则中使用的时候才会调用,函数其实和变量用法一样,所以就不要想着突然在Android.mk文件中echo 了,这不是shell,除非echo放在命令规则里面,而且该命令规则会被执行

3.0 怎么在makefile里面输出?

一种办法就是在2.0 说的在命令规则中echo,还有就是 

$(warning "hello world!")  $(erro "no, I'm dying") 其中原理就不摘抄了:https://blog.csdn.net/daoshuti/article/details/72732964

4.0 makefile 中自定义函数:

define foo1

    @echo "My name is $(0)"

endef

build/core/definitions.mk中很多函数。有一篇文章提到自定义函数的调用方法,$(call foo1 var0 var1 ...) 不过Android build中也有直接$(foo1 var0) 这样的调用

这一篇博客所说,自定义函数的调用其实是通过 makefile中的预定义函数call 来间接调用的,似乎却有道理,不过上面确实像调用预定于函数一样直接用了,没有深入研究,是否和函数预先声明顺序有类似关系?

4.0 include 被包含的文件相当于在当前位置直接展开

5.0 makefile中预定义函数,即makefile自身支持的直接用的基本函数,它的调用就 $(fun var0 var1...)

常用举例: 5.1 排序函数 $(sort <list>) 给字符串 <list> 中的单词排序 (升序)  

                  5.2 加前缀函数 $(addprefix <prefix>,<names...>)把前缀 <prefix> 加到 <names> 中的每个单词前面

                  5.3 循环 $(foreach <var>,<list>,<text>)
这个函数的意思是,把参数<list>;中的单词逐一取出放到参数<var>;所指定的变量中,然后再执行< text>;所包含的表达式。每一次<text>;会返回一个字符串,循环过程中,<text>;的所返回的每个字符串会以空格分隔,最后当整个循环结束时,<text>;所返回的每个字符串所组成的整个字符串(以空格分隔)将会是foreach函数的返回值。

                5.4 $(eval text) 它的意思是 text 的内容将作为makefile的一部分而被make解析和执行  

                5.5 $(filter PATTERN…,TEXT) 函数名称:过滤函数—filter。 函数功能:过滤掉字串“TEXT”中所有不符合模式“PATTERN”的单词,保留所有符合此模式的单词。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值