https://www.jianshu.com/p/57c01e97c9b8

计算怎么办?

前面我们把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)
endif
endif

计算表达式的值 - 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纷纷被引进来了,需要用的话,别客气。完成工作是主要的,方法不重要。

作者:Jtag特工
链接:https://www.jianshu.com/p/57c01e97c9b8
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

最新文章

  1. iOS开发--面试
  2. MVC4 遇到问题总结
  3. ASP.NET中数据邦定效率问题的一点看法 - 转载(自由的天空)
  4. 使用NSURLSession请求需要AD认证的HTTPS服务器
  5. java.util.Date转java.sql.Date丢失时间问题
  6. sql server使用说明
  7. .Net Memory -- Windbg基本命令
  8. php 禁用eval( )函数
  9. iOS Storyboard适配问题
  10. Vue Mixin 与微信小程序 Mixins 应用
  11. Bootstrap-datepicker3官方文档中文翻译---I18N/国际化(原文链接 http://bootstrap-datepicker.readthedocs.io/en/latest/index.html)
  12. MongoDB 3.6版本关于bind_ip设置
  13. 【Qt】Qt Quick 之 QML 与 C++ 混合编程详解
  14. 新浪SAE创建微信模板消息应用与SVN的使用
  15. Python和Java分别实现冒泡排序
  16. Ubuntu 16.04 不能用inittab 设置 运行等级 runlevel
  17. Oracle 基本操作--数据类型、修改和删除表、增删改查和复制表
  18. 006_mac osx 应用跨屏幕
  19. [转]NLP Tasks
  20. Python面试题整理-更新中

热门文章

  1. ProGuard代码混淆详细攻略
  2. window wlan 相关服务
  3. idea中maven导入jar包
  4. 基于Redis实现分布式锁以及任务队列
  5. Windows7下安装cpu版的Tensorflow
  6. Maven初步踩坑
  7. 【WP8】扩展CM的INavigationService方法
  8. consul在windows下的安装
  9. 使用vi时提示 write error in swap file
  10. 分析技术在PMP中的应用