makefile-03-条件判断

    xiaoxiao2022-07-12  189

    8.条件判断语句http://blog.51cto.com/11134889/2108167

    8.1.语法规则

    Makefile中支持条件判断语句,可以直接比较两个不同变量的值和常量值。

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

    条件判读语法说明:

    条件判断关键字:

    示例:

    .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

    输出结果:

    8.2.工程经验

    1.条件判断语句之前可有有空格,但不能有Tab字符(‘\t’)

    2.在条件语句中不要使用自动变量( $@ $^ @<)

    3.一条完整的条件语句必须位于同一个Makefile中

    4.条件判断类似C语言中的宏,预处理阶段有效,执行阶段无效

    5.Make在加载Makefile时,首先计算表达式的值(赋值方式不同,计算方式不同),根据判断语句单纯表达式决定执行的内容。

    问题,下面Makefile执行后是否相同??

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

    示例:

    .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

    输出结果:

     

     

    最新回复(0)