条件判断语句
来源:互联网 发布:opencv icp算法代码 编辑:程序博客网 时间:2024/05/21 17:29
1 makefile中支持条件判断语句
- 可以根据条件的值来决定make的执行
- 可以比较两个不同变量或者变量和常量值
- 注意事项
- 条件判断语句只能控制make实际执行的语句,但是不能控制规则中命令的执行过程
2 条件判断语句的语法说明
常用形式
- ifxxx (arg1,arg2)
其它合法形式
- ifxxx “arg1” “arg2”
- ifxxx ‘arg1’ ‘arg2’
- ifxxx ‘arg1’ “arg2”
- ifxxx “arg1” ‘arg2’
- 条件判断关键字
编程实验:条件判断语句初探
.PHONY : testvar1 := Avar2 := $(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 == var2var2 is NOT emptyvar2 is NOT emptyvar3 is empty
3 一些工程经验
- 条件判断语句之前可以有空格,但不能Tab字符(’\t’)
- 在条件语句中不要使用自动变量($@, $^, $<)
- 一条完整的语句必须位于同一个makefile中
- 条件判断类似C语言的宏,预处理阶段有效,执行阶段无效
- make在加载makefile时
- 首先计算表达式的值(赋值方式不同,计算方式不同)
- 根据判断语句的表达式决定执行的内容
下面的代码执行结果相同吗?
编程实验:make行为
.PHONY : testvar1 :=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 definedvar2 is NOT definedvar3 is NOT definedvar4 is defined由于条件语句是在make加载makefile时进行处理的,所以当变量进行递归赋值的时候,处理到条件判断语句时,无法确定在之后的语句中是否改变了变量的值,所以make认为此变量非空。在make完成对makefile的预处理后,所有变量的值都是确定的。但是,在本例中如果判断var3和var4的值是否相等,却有一个与之矛盾的结果,输出结果为相同。按理说一个非空,一个空应该不相等才是?
4 小结
- 条件判断根据条件的值来决定make的执行
- 条件判断可以比较两个不同的变量或者变量和常量值
- 条件判断在预处理阶段有效,在执行阶段无效
- 条件判断不能控制规则中命令的执行过程
修改记录
参考资料
唐老师 — 狄泰软件学院 — 十二月提升计划
阅读全文
0 0
- SQL条件判断语句
- SQL条件判断语句
- 条件判断语句
- sqlserver条件判断语句
- 3.9 条件判断语句
- sqlserver条件判断语句
- Perl 条件判断语句
- 条件判断语句比较
- Linux_条件判断语句
- Scala条件判断语句
- if条件判断语句
- 条件判断语句
- logstash 条件判断语句
- Makefile 条件判断语句
- 8-条件判断语句
- JAVA条件判断语句
- 语句(Statement)---条件判断语句
- for (初始化语句; 判断条件; 循环条件)
- 基于jsp+servlet+javabean的MVC模式简单应用
- mysql
- C++ 最小生成树之kruskal(克鲁斯卡尔)算法
- Java 代码性能优化
- 初学四旋翼之定高
- 条件判断语句
- 浅谈渗透基础总汇
- hdu4348 为 心灵之旅To The Moon 出的 时光穿梭 题。主席树
- 致远行的人,自编TensorFlow教程(2)
- List ,Map ,Set 小记
- Spring MVC Controller配置方式
- 浅谈协议类与句柄类
- 昊昊爱运动 II
- 初入Android