条件判断语句

--------【Makefile】 同时被 2 个专栏收录
9 篇文章 0 订阅
19 篇文章 0 订阅

1 makefile中支持条件判断语句

  • 可以根据条件的值来决定make的执行
  • 可以比较两个不同变量或者变量和常量值

这里写图片描述

  • 注意事项
    • 条件判断语句只能控制make实际执行的语句,但是不能控制规则中命令的执行过程

2 条件判断语句的语法说明

  • 常用形式

    • ifxxx (arg1,arg2)
  • 其它合法形式

    • ifxxx “arg1” “arg2”
    • ifxxx ‘arg1’ ‘arg2’
    • ifxxx ‘arg1’ “arg2”
    • ifxxx “arg1” ‘arg2’

这里写图片描述

  • 条件判断关键字

这里写图片描述

编程实验:条件判断语句初探

.PHONY : test

var1 := A
var2 := $(var1)
var3 :=

test:
    ifeq ($(var1),$(var2)) 
        @echo "var1 == var2"
    else
        @echo "var1 != var2"
    endif

    ifneq ($(var2),)
        @echo "var2 is NOT empty"    
    else
        @echo "var2 is empty"    
    endif

    ifdef var2
        @echo "var2 is NOT empty"    
    else
        @echo "var2 is empty"    
    endif

    ifndef var3
        @echo "var3 is empty"    
    else
        @echo "var3 is NOT empty"    
    endif
输出结果:
var1 == var2
var2 is NOT empty
var2 is NOT empty
var3 is empty

3 一些工程经验

  • 条件判断语句之前可以有空格,但不能Tab字符(’\t’)
  • 在条件语句中不要使用自动变量($@, $^, $<)
  • 一条完整的语句必须位于同一个makefile中
  • 条件判断类似C语言的宏,预处理阶段有效,执行阶段无效
  • make在加载makefile时
    • 首先计算表达式的值(赋值方式不同,计算方式不同)
    • 根据判断语句的表达式决定执行的内容

下面的代码执行结果相同吗?

这里写图片描述

编程实验:make行为

.PHONY : test

var1 :=
var2 := $(var1)

var3 =
var4 = $(var3)

#var3 = 3 

test:
    ifdef var1 
        @echo "var1 is defined"
    else
        @echo "var1 is NOT defined"
    endif

    ifdef var2
        @echo "var2 is defined"    
    else
        @echo "var2 is NOT defined"    
    endif

    ifdef var3 
        @echo "var3 is defined"
    else
        @echo "var3 is NOT defined"
    endif

    ifdef var4
        @echo "var4 is defined"    
    else
        @echo "var4 is NOT defined"    
    endif

输出结果:
var1 is NOT defined
var2 is NOT defined
var3 is NOT defined
var4 is defined

由于条件语句是在make加载makefile时进行处理的,所以当变量进行递
归赋值的时候,处理到条件判断语句时,无法确定在之后的语句中是否
改变了变量的值,所以make认为此变量非空。在make完成对makefile的
预处理后,所有变量的值都是确定的。但是,在本例中如果判断var3和
var4的值是否相等,却有一个与之矛盾的结果,输出结果为相同。按理
说一个非空,一个空应该不相等才是?

4 小结

  • 条件判断根据条件的值来决定make的执行
  • 条件判断可以比较两个不同的变量或者变量和常量值
  • 条件判断在预处理阶段有效,在执行阶段无效
  • 条件判断不能控制规则中命令的执行过程

修改记录


时间动作
2017.7.16首次上传

参考资料


唐老师 — 狄泰软件学院 — 十二月提升计划

  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值