条件判断语句(七)

  

,,,,,,,,我们之前说过makefile是一种脚本语言程序,那么程序便会有相应的语法。在makefile中支持条件判断语句,值。需要注意的是:。格式如下

条件判断语句(七)

,,,,,,,,条件判断语句的语法如下

条件判断语句(七)

,,,,,,,,那么在makefile中都有哪些的条件判断关键呢?

<强> <强> <强> 强,相等为真的,否则为假
<强> 强,不相等为真的,否则为假
<强> 强,有值为true,否则为假<强> 强,没有值为true,否则为假

,,,,,,,,下来我们还是以代码为例来进行说明

.PHONY :测试      var1 :=,   var2 :=, $ (var1)   var3 :=时间:test    ,,,ifeq  ((var1),美元(var2))   ,,,,,,,@echo “var1 ==, var2"   ,,,   ,,,,,,,@echo “var1  !=, var2"   ,,endif      ,,,ifneq  ($ (var2))   ,,,,,,,@echo “var2  is  NOT  empty"   ,,,   ,,,,,,,@echo “var2  is  empty"   ,,endif      ,,,ifdef  var2   ,,,,,,,@echo “var2  is  NOT  empty"   ,,,   ,,,,,,,@echo “var2  is  empty"   ,,endif      ,,,ifndef  var3   ,,,,,,,@echo “var3  is  empty"   ,,,   ,,,,,,,@echo “var3  is  NOT  empty"   ,,,endif

,,,,,,,,我们来看看编译结果

条件判断语句(七)

,,,,,,,,我们看到编译出错了,原因就是因为ifeq是规则而不是命令,所以它前面一定是空格而不是Tab键。下来我们换成空格来看看

条件判断语句(七)

,,,,,,,,我们看到编译已经通过了,而且也正常运行结束。变量var2就取的是变量var1的值,因此在第一个它们的比较相等时肯定会输出相等;第二个用var2和空字符进行比较,那么var2肯定不为空;第三个就直接用ifdef关键字来进行判断var2是否存在了;最后一个var3肯定为空了,根据一些前辈们的经验,总结以下的几条规则:

,,,,,,,,那么我们来看看下面的代码输出相同吗?

.PHONY : te      var1 :=,   var2 :=, $ (var1)      时间=var3    时间=var4  $ (var3)      时间:test    ,,,ifdef  var1   ,,,,,,,@echo “var1  is  defined"   ,,,   ,,,,,,,@echo “var1  is  NOT  defined"   ,,endif   ,,,,   ,,,ifdef  var2   ,,,,,,,@echo “var2  is  defined"   ,,,   ,,,,,,,@echo “var2  is  NOT  defined"   ,,endif      ,,,ifdef  var3   ,,,,,,,@echo “var3  is  defined"   ,,,   ,,,,,,,@echo “var3  is  NOT  defined"   ,,endif   ,,,,   ,,,ifdef  var4   ,,,,,,,@echo “var4  is  defined"   ,,,   ,,,,,,,@echo “var4  is  NOT  defined"   ,,,endif

,,,,,,,,我们看着两个没啥差别,结果应该是一样的,都是输出的是空的。我们来看看编译结果

条件判断语句(七)

,,,,,,,,那么我们看到前三个是空的,var4竟然不为空。我们来仔细看下,在var1和var2的定义中都是直接赋值(=);而var3和var4是递归赋值(=)。在编译器看来var4是有值的,只不过在编译阶段不确定它的值究竟是什么而已。我们在下面加上var3=A,给var3一个具体的值,试试看效果是不是一样的。

条件判断语句(七)

,,,,,,,,效果是一样的。因此我们在makefile中不推荐递归赋值的这种写法,容易造成误解。通过对条件判断语句的学习,总结如下:

条件判断语句(七)