千家信息网

makefile(03)_条件判断

发表于:2025-12-02 作者:千家信息网编辑
千家信息网最后更新 2025年12月02日,8.条件判断语句8.1.语法规则Makefile中支持条件判断语句,可以直接比较两个不同变量的值和常量值。注意:条件判断语句只能用于控制make实际执行的语句,不能控制规则中命令的执行过程。条件判读语
千家信息网最后更新 2025年12月02日makefile(03)_条件判断

8.条件判断语句

8.1.语法规则

Makefile中支持条件判断语句,可以直接比较两个不同变量的值和常量值。
注意:条件判断语句只能用于控制make实际执行的语句,不能控制规则中命令的执行过程。
条件判读语法说明:

条件判断关键字:

示例:

.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

输出结果:

8.2.工程经验

1.条件判断语句之前可有有空格,但不能有Tab字符('\t')
2.在条件语句中不要使用自动变量( $@ $^ @<)
3.一条完整的条件语句必须位于同一个Makefile中
4.条件判断类似C语言中的宏,预处理阶段有效,执行阶段无效
5.Make在加载Makefile时,首先计算表达式的值(赋值方式不同,计算方式不同),根据判断语句单纯表达式决定执行的内容。
问题,下面Makefile执行后是否相同??

答案:不同,前者的赋值方式可以做在make加载Makefile时判断出变量是否定义,而后者无法做出判断。
示例:

.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

输出结果:

0