makefile(03)_条件判断

8.条件判断语句

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.在条件语句中不要使用自动变量( [email protected] $^ @<)
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

输出结果:

原文地址:http://blog.51cto.com/11134889/2108167

时间: 2024-10-11 09:19:21

makefile(03)_条件判断的相关文章

Linux makefile教程之条件判断六[转]

使用条件判断 —————— 使用条件判断,可以让make根据运行时的不同情况选择不同的执行分支.条件表达式可以是比较变量的值,或是比较变量和常量的值. 一.示例 下面的例子,判断$(CC)变量是否“gcc”,如果是的话,则使用GNU函数编译目标. libs_for_gcc = -lgnu normal_libs = foo: $(objects) ifeq ($(CC),gcc) $(CC) -o foo $(objects) $(libs_for_gcc) else $(CC) -o foo

makefile中的条件判断ifeq、ifneq、ifdef

使用条件判断,可以让make根据运行时的不同情况选择不同的执行分支.条件表达式可以是比较变量的值,或是比较变量和常量的值. 一.示例 下面的例子,判断$(CC)变量是否"gcc",如果是的话,则使用GNU函数编译目标. libs_for_gcc = -lgnu normal_libs = foo: $(objects) ifeq ($(CC),gcc) $(CC) -o foo $(objects) $(libs_for_gcc) else $(CC) -o foo $(objects

条件判断语句(七)

我们之前说过 makefile 是一种脚本语言程序,那么程序便会有相应的语法.在 makefile 中支持条件判断语句,可以根据条件的值来决定 make 的执行,也可以比较两个不同变量或者变量和常量值.需要注意的是:条件判断语句只能用于控制 make 实际执行的语句:但是,不能控制规则中命令的执行过程.格式如下 条件判断语句的语法如下 那么在 makefile 中都有哪些的条件判断关键呢? 关键字 功能 ifeq 判断参数是否相等,相等为 true,否则为 false ifneq 判断参数是否不

make--变量 条件判断 函数定义及调用

一.变量的高级主题 A.变量值的替换1.使用指定字符(串)替换变量中的后缀字符(串)2.语法格式:$(var:a=b) (将a替换成b)a.替换表达式中不能有任何的空格b.make中支持使用${}对变量进行取值示例 src:=a.cc b.cc c.cc obj:=$(src:cc=o) test: @echo "obj=>$(obj)" 输出结果由上图可以看出变量值的替换B.变量的模式替换1.使用%保留变量值中的指定字符,替换其它字符2.语法格式:$(var:a%b=x%y)a

Makefile文件(六)_使用条件判断

参考:http://blog.csdn.net/liang13664759/article/details/1771246/ 使用条件判断,可以让make根据运行时的不同情况选择不同的执行分支.条件表达式可以使比较变量的值,或是比较变量和常量的值. 一.示例 判断$(CC)变量是否"GCC",如果是的话,则用GNU函数编译目标. libs_for_gcc=lgnu normal_libs= foo:$(objects) ifeq($(CC),gcc) $(CC)  -o foo $(o

从头开始写项目Makefile(六):参数传递、条件判断、include

[版权声明:转载请保留出处:blog.csdn.net/gentleliu.Mail:shallnew at 163 dot com] 在多个Makefile嵌套调用时,有时我们需要传递一些参数给下一层Makefile.比如我们在顶层Makefile里面定义的打开调试信息变量DEBUG_SYMBOLS,我们希望在进入子目录执行子Makefile时该变量仍然有效,这是需要将该变量传递给子Makefile,那怎么传递呢?这里有两种方法: 1.     在上层Makefile中使用"export&qu

Makefile条件判断 ——————————【Badboy】

使用条件判断,可以让make根据运行时的不同情况选择不同的执行分支.条件表达式可以是比较变量的值,或是比较变量和常量的值. 一.示例 下面的例子,判断$(CC)变量是否"gcc",如果是的话,则使用GNU函数编译目标. libs_for_gcc = -lgnu normal_libs= foo: $(objects) ifeq($(CC),gcc) $(CC) -o foo $(objects) $(libs_for_gcc) else $(CC) -o foo $(objects)

makefile中条件判断与函数

1. 条件判断 1.1 语法 条件表达式的语法为: <conditional-directive> <text-if-true> endif 以及: <conditional-directive> <text-if-true> else <text-if-false> endif 其中<conditional-directive>表示条件关键字,如"ifeq".这个关键字有四个. (1)第一个是我们前面所见过的&q

egrep及bash编程之条件判断

REGEXP:REGular EXPressiongrep: 根据模式搜索文本,并将符合模式的文本行显示出来.Pattern: 模式,文本字符和正则表达式的元字符组合而成匹配条件正则表达式:Basic REGEXP:基本Extended REGEXP:扩展基本正则表达式:.: 匹配任意单个字符[]: 匹配指定范围内的任意单个字符 [abc], [a-m], [a-z], [A-Z], [0-9], [a-zA-Z], [0-9a-zA-Z] 字符集合:[:digit:]数字, [:lower:]