条件判断

  1. 概要

    • 两种比较

      • 变量与变量之间比较。
      • 变量与值之间比较。
      • 值与值之间比较没有意义。
    • 功能

      • 条件的执行一些指令或者变量定义。
      • 和宏定义有些类似。
    • 解析

      • 条件指令ifeq ($(var1),$(var2))如果条件成立就执行这个指令到下个指令之间的。形成匹配。
      • 比如查看核心数量是单数还是双数。
    • 案例

      .PHONY:all clean
      CORES=$(shell lscpu|grep -E -e "^CPU\(s\):"|cut -d ":" -f 2|xargs)
      ifeq ($(shell $(($(CORES)%2))),0)
      RET=even cores
      else
      RET=odd  cores
      endif
      
      all:
             @echo $(RET)
      
    • 说明

      • 和编程里面的if else endif的结构相同。
      • 也可以进行多层的if else else endif
      • 而且还可以进行条件嵌套。在一个条件判断中再嵌套一个条件判断。
      • if else这一行后面都跟着一个条件表达式。
      • 执行和比较和大多数编程语言一样。
    • 条件表达式

      • 格式一

        • (arg1,arg2)
        • 可以是变量可以是字符串,完整版。
      • 格式二

        • 字符串有两种"",'',可以交错比较,就是四种。
        • if str1 str2有四种。
        • 这种就是对于明确字符串的比较,简略版,基本没有必要。
        • 使用最多的还是第一种。
    • 空格比较

      • ($(strip $(undefine)),)
      • 空变量可以包含多个空白字符的前置或后置。所以使用去除空格的方式精确比较。
    • 指令类型

      • ifeq,ifneq,ifdef
      • ifneq的格式和ifeq相同。
      • ifdef表示定义了没有,和空还是有区别的。
    • 定义过和未定义过

      • 前者是空白字符。
      • 后者是空串。
    • 变量和条件

      • 前面有讲变量的几处来源。
      • 也有讲取消定义undef
      • 判断是否已经定义ifdef,ifndef还有函数$(origion var).判断var是否定义。如果是undefine就说明是未定义。否则就是已经定义。
    • 注意

      • 句首不能是.RECIPEPREFIX,句尾可以有注释。
      • 结构和其他的一样,可以嵌套,中间的是对应条件的指令。
      • 不能使用自变量,自变量是执行时才知道其值,这个发生在读取阶段。
      • 可以结合findstring函数来判断指令的参数。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值