zoukankan      html  css  js  c++  java
  • 第8课

    第8课 - 条件判断语句

    1. makefile中的条件判断语句

      (1)makefile 中支持条件判断语句

        — 可以根据条件的值来决定 make 的执行

        — 可以比较 两个不同变量 或者 变量和常量值 方法 

          ifxxx  (arg1,arg2)

          # for true

          else

          # for false

          endif

      (2)注意事项:条件判断语句只能用于控制 make 实际执行的语句 ; 但是不能控制规则中命令的执行过程。

    2. 条件判断语句的语法

      (1)常用形式

        ifxxx   (arg1,arg2)

      (2)其它合法形式

        ifxxx   "arg1"  "arg2"

          ifxxx   'arg1'   'arg2'

        ifxxx   "arg1"   'arg2'

        ifxxx   'arg1'   "arg2" 

      (3)小贴士(注意条件判断语句的格式)

           

    3. 条件判断关键字

        

     1 .PHONY : test
     2 
     3 var1 := A
     4 var2 := $(var1)
     5 var3 :=
     6 
     7 test:
     8     ifeq ($(var1),$(var2)) 
     9         @echo "var1 == var2"
    10     else
    11         @echo "var1 != var2"
    12     endif
    13     
    14     ifneq ($(var2),)
    15         @echo "var2 is NOT empty"    
    16     else
    17         @echo "var2 is empty"    
    18     endif
    19     
    20     ifdef var2
    21         @echo "var2 is NOT empty"    
    22     else
    23         @echo "var2 is empty"    
    24     endif
    25     
    26     ifndef var3
    27         @echo "var3 is empty"    
    28     else
    29         @echo "var3 is NOT empty"    
    30     endif

    4. 一些工程经验

      (1)条件判断语句之前可以有空格,但是不能有 Tab 字符(' '

      (2)在条件判断语句中不要使用自动变量($@ , $^ , $<)

      (3)一条完整的条件语句必须位于同一个 makefile 中

      (4)条件判断类似C语言中的宏,预处理阶段有效,执行阶段无效

      (5)make 在加载 makefile 时

        • 首先计算表达式的值(赋值方式不同,计算方式不同
        • 根据判断语句的表达式决定执行的内容    
     1 .PHONY : test
     2 # 赋值方式不同,计算方式不同
     3 var1 :=
     4 var2 := $(var1)
     5 
     6 var3 =
     7 var4 = $(var3)  # 由于是递归赋值,因此不能确定变量的值,默认为def
     8 
     9 #var3 = 3 
    10 
    11 test:
    12     ifdef var1 
    13         @echo "var1 is defined"
    14     else
    15         @echo "var1 is NOT defined"
    16     endif
    17     
    18     ifdef var2
    19         @echo "var2 is defined"    
    20     else
    21         @echo "var2 is NOT defined"    
    22     endif
    23     
    24     ifdef var3 
    25         @echo "var3 is defined"
    26     else
    27         @echo "var3 is NOT defined"
    28     endif
    29     
    30     ifdef var4
    31         @echo "var4 is defined"    
    32     else
    33         @echo "var4 is NOT defined"    
    34     endif
    35  
    36 #输出结果
    37 var1 is NOT defined
    38 var2 is NOT defined
    39 var3 is NOT defined
    40 var4 is defined

    注:本文整理于《狄泰12月提升计划》课程内容

    狄泰QQ群:199546072

  • 相关阅读:
    背包——[Usaco2007 Jan]Running POJ3661
    KMP的next函数——BZOJ1355
    对括号匹配问题的在深入思考
    优先队列——[Usaco2009 Open]工作安排Job
    完全背包——poj 3181
    奇异数
    背包计数
    最大递增子序和——POJ3616
    大组合数取模——fzu 2020(可做模板)
    activemq 代码库
  • 原文地址:https://www.cnblogs.com/shiwenjie/p/6841228.html
Copyright © 2011-2022 走看看