makefile专题:条件判断语句

关键词:makefile中条件判断语句

1. makefile中条件判断语句

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

Note:
条件判断语句只能用于控制make实际执行的语言,但是不能控制规则中命令的执行过程

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

  • 条件判断关键字

.PHONY : test

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

test : 
    ifeq ($(var1),$(var2))    # 注意:在ifeq 前面不能使用\tab键,而是使用空格键
        @echo "var1 == var2"
    else
        @echo "var1 != var2"
    endif

    ifneq ($(var1),$(var2))
        @echo "var1 != var2"
    else
        @echo "var1 == var2"
    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

输出结果:

$ make
var1 == var2
var1 == var2
var2 is NOT empty
var3 is empty

2. 工程经验

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

问题:下面代码的输出相同吗?

.PHONY : test

var1 :=
var2 := $(var1)

var3 =
var4 = $(var3)

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

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

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

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

输出结果:

$ make test 
var1 is empty
var2 is empty
var3 is empty
var4 is NOT empty

总结:var3和var4是通过递归赋值,var4的值不能在预处理阶段判断值是否存在,需要在执行时才能判断var4的值,编译器将在预处理阶段不能判断是否为空的值设置为不为空,条件判断语句是在预处理阶段有效,因此var4的值不为空。

3. 小结

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

声明:此文章为本人在学习狄泰软件学院《十二月提升计划》所做的笔记,参考书籍《专业嵌入式软件开发》——李云,文章中包含狄泰软件资料内容和《专业嵌入式软件开发》资料内容,一切版权归狄泰软件《专业嵌入式软件开发》所有!

你可能感兴趣的:(makefile专题:条件判断语句)