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
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

Android.mk(5) 计算怎么办?的更多相关文章

  1. Android.mk文件语法规范 原文

    序言:------------- 此文档旨在描述Android.mk文件的语法,Android.mk文件为Android NDK(原生开发)描述了你C/C++源文件.为了明白下面的内容,你必须已经阅读 ...

  2. Android.mk

    Introduction: Android.mk编译文件是用来向Android NDK描述你的C,C++源代码文件的, 这篇文档描述了它的语法.在阅读下面的内容之前,假定你已经阅读了docs/OVER ...

  3. Android NDK开发之Android.mk文件

    Android NDK开发指南---Android.mk文件 博客分类: Android NDK开发指南   Android.mk文件语法详述 介绍: ------------ 这篇文档是用来描述你的 ...

  4. Android.mk具体解释

    概述     Android.mk文件用来向编译系统描写叙述怎样编译你的源码.更确切地说,该文件事实上就是一个小型的Makefile.由于该文件会被NDK的编译工具解析多次,因此应该尽量降低源码中声明 ...

  5. Android.mk文件语法规范及使用模板

    Android.mk文件语法详述 介绍:------------这篇文档是用来描述你的C或C++源文件中Android.mk编译文件的语法的,为了理解她们我们需要您先看完docs/OVERVIEW.h ...

  6. Android NDK开发指南(二)Android.mk文件

    http://www.cnblogs.com/yaozhongxiao/archive/2012/03/06/2382225.html 1.  概述 Android.mk文件是用来描述build sy ...

  7. Android.mk走读与Cmake配置

    Android.mk认识: 在上一次[https://www.cnblogs.com/webor2006/p/9946061.html]中学会了用NDK提供的交叉编译工程编译成Android能运行的可 ...

  8. 关于jni编译32位、64位动态库(Android.mk和Application.mk文件)

    最近新项目需要编译64位的动态库,这里记录如何配置. 在jni目录下加入Android.mk和Application.mk文件. Application.mk APP_ABI := armeabi a ...

  9. Android.mk 文件语法详解

    0. Android.mk简介: Android.mk文件用来告知NDK Build 系统关于Source的信息. Android.mk将是GNU Makefile的一部分,且将被Build Syst ...

随机推荐

  1. linux下nginx安裝

    1.yum安裝 yum安裝  http://nginx.org/packages/centos/7/noarch/RPMS/ 第一步: 安裝命令: yum localinstall http://ng ...

  2. php 正则获取字符串中的汉字preg_match_all

    preg_match_all('/[\x{4e00}-\x{9fff}]+/u', $list[$i]['iparr'], $matches); $list[$i]['iparr'] = join(' ...

  3. iOS: Sorted Array with Compare

    Question(提问): What I want to do seems pretty simple, but I can't find any answers on the web. I have ...

  4. OCA,OCP,OCM傻傻分不清?

    可能大家知道OCA.OCP.OCM的关系是一个比一个难考,一个比一个含金量高,但是你知道具体的考试科目.考试方式.就业形势区别吗?不知道的话这篇通俗易懂的文章会让你一目了然. 区别一:含金量 ■OCA ...

  5. xshell使用xftp传输文件 使用pure-ftpd搭建ftp服务

    xshell使用xftp传输文件 下载xftp5 https://www.baidu.com/link?url=8rtxgX3JRIbUFO1Samzv5aXhfwRG7Cf8i4vi573QexoH ...

  6. 腾讯QQ积分CSRF导致积分任意挥霍(我的积分为什么少了)

    触发点:http://jifen.qq.com/html5/index.html?ADTAG=JIFEN.MART.INDEX 随意兑换一个商品: 因为刚才我已经兑换过了,所以积分没有了.. 没关系, ...

  7. [Learn AF3]第二章 App Framework 3.0的组件View——AF3的驱动引擎

    View:af3中的驱动引擎   组件名称:View     使用说明:按照官方的说法,view组件是af3的“驱动引擎(driving force)”,view是af3应用的基础,一个app中可以包 ...

  8. php sql纯语句

    条件语句CASE CASE WHEN a.business_mark != END as source_type, 条件语句 CASE ELSE CASE WHEN a.business_mark ! ...

  9. JS检查当图片不存在时显示默认图片和键盘大小写键状态

    当图片不存在时显示默认图片 <script type="text/javascript"> var imgs = document.images; for(var i ...

  10. mybatis-generator 的坑我都走了一遍

    一.简介 mybatis-geneator是一款mybatis自动代码生成工具,可以通过配置,快速生成mapper和xml文件. 二.配置方法 在项目的pom文件中添加插件配置 <plugin& ...