我们也说说Android.mk(5)
来源:互联网 发布:天刀官网丐妹捏脸数据 编辑:程序博客网 时间:2024/04/28 20:24
https://yq.aliyun.com/articles/27570?spm=5176.100239.blogcont37401.11.bl6Pwq
摘要: 前面我们把Makefile做为一门语言的主要特性大致做了一个描述。但是,我们在实际的Android.mk当中还是会发现有很多事情光用Makefile的字符串替换搞不定啊,这可如何是好?其实,这就是我们在第一讲的最开始就讲shell函数的原因,因为这要靠shell脚本来解决了。
我们也说说Android.mk(5) - 计算怎么办?
计算怎么办?
前面我们把Makefile做为一门语言的主要特性大致做了一个描述,它集合了目标式的模式和函数式的模式,还有大量的宏的思想,已经可以写出相当复杂的Makefile了。
但是,很不幸的是,虽然已经很复杂了,我们在实际的Android.mk当中还是会发现有很多事情光用Makefile的字符串替换搞不定啊,这可如何是好?
其实,这就是我们在第一讲的最开始就讲shell函数的原因,因为这要靠shell脚本来解决了。
我们看个实际的例子:core.mk中判断make的版本号大于等于3.81版的脚本:
# Check for broken versions of make.# (Allow any version under Cygwin since we don't actually build the platform there.)ifeq (,$(findstring CYGWIN,$(shell uname -sm)))ifneq (1,$(strip $(shell expr $(MAKE_VERSION) \>= 3.81)))$(warning **)$(warning * You are using version $(MAKE_VERSION) of make.)$(warning * Android can only be built by versions 3.81 and higher.)$(warning * see https://source.android.com/source/download.html)$(warning **)$(error stopping)endifendif
计算表达式的值 - expr语句
expr语句可以用来计算变量计算结果的值。
- 加法:+
- 减法:-
- 乘法:\*
- 除法:/
- 求余数: %
特别注意一下乘法,要在*之前加一个\
取消变量的定义 - unset语句
在实际写Makefile的过程中,有时候需要修改环境变量。shell中提供了unset语句
不多说,直接上例子:
java_version_str := $(shell unset _JAVA_OPTIONS && java -version 2>&1)javac_version_str := $(shell unset _JAVA_OPTIONS && javac -version 2>&1)
shell也搞不定怎么办?
shell总算是可以做些简单的计算了,但是对于规模到一定程度的需求,还是搞不定,怎么办?
在Android.mk系统中,您可以看到python,ruby纷纷被引进来了,需要用的话,别客气。完成工作是主要的,方法不重要。
本文为云栖社区原创内容,未经允许不得转载,如需转载请发送邮件至yqeditor@list.alibaba-inc.com;如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件至:yqgroup@service.aliyun.com 进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容。
阅读全文
0 0
- 我们也说说Android.mk(5)
- 我们也说说Android.mk(5) - 案例教程
- 我们也说说Android.mk(3) - 宏
- 我们也说说Android.mk(1)
- 我们也说说Android.mk(3)
- 我们也说说Android.mk(4)
- 我们也说说Android.mk(6)
- 我们也说说Android.mk(1) - 从函数说起
- 我们也说说Android.mk(4) - 计算怎么办?
- 我们也说说Android.mk(2)-函数进阶教程
- 我们也说说Android.mk(2) - 函数进阶教程 - 分支、循环、子程序
- 我也说说Emacs吧(5)
- 也说说第一博客
- 我也说说房价
- 也说说代理模式
- 我也说说盗版
- 我也说说“商业模式”
- 我也说说“商业模式”
- 防止点击事件里面的代码重复运行
- Object类的方法
- jQuery ajax - serialize() 方法
- ”cnpm不是内部或外部命令,也不是可运行命令或批处理文件“问题解决
- FIND_IN_SET和like的区别
- 我们也说说Android.mk(5)
- API接口安全性设计
- 九九乘法表
- aliyun ubuntu pstack无法使用的问题解决 crawl: Input/output error
- PAT甲级 1050. String Subtraction (20)
- linux笔记
- Vim命令合集
- active mq
- ICE 3.7