||
Makefile中的条件语句可以根据变量的值执行或忽略makefile文件中的一部分脚本。条件语句可以将一个变量与其他变量的相比较,或将一个变量与一个字符串常量相比较。条件语句用于控制make实际看见的makefile文件部分,而不能用于执行时控制shell命令。
1. 条件语句的例子
如下面条件语句的例子告诉make如果变量CC的值是“gcc”则使用一个链接库,若不是则使用其他链接库。它可以根据变量CC值得不同来链接不同的函数库。
libs_for_gcc=-lgnu
normal_libs=
foo:$(objects)
ifeq($(CC),gcc)
$(CC) –o foo $(objects)$(libs_for_gcc)
else
$(CC) –o foo $(objects)$(normal_libs)
endif
相同的结果也能通过另一种方法获得,即先将变量的赋值条件化,然后再使用变量:
libs_for_gcc=-lgnu
normal_libs=
ifeq($(CC),gcc)
libs=$(libs_for_gcc)
else
libs=$(normal_libs)
endif
foo:$(objects)
$(CC) –o foo $(objects)$(normal_libs)
2. 条件语句的语法
我们经常要测试一个变量是否有非空值,当经过复杂的变量和函数扩展得到一个值时,该值有可能由于包含空格而被认为不是空值,由此可能造成混乱,可以使用strip函数来避免将空格视为非空值得干扰。
ifeq($(strip$(foo)))
text-if-empty
endif
上述语句的$(foo)中及时全为空格,也被当做空值处理。
ifdef variable-name
text-if-true
else
text-if-false
endif
如果变量“variable-name”从未被定义过则其是空值,注意ifdef仅仅测试变量是否被定义,它无法判断变量是否有非空值,因而使用ifdef测试所有定义过的变量都返回真,但那些如“foo=”情况的除外,测试空值可以使用ifeq($(foo))。例如:
bar=
foo=$(bar)
ifdef foo
frobozz=yes
else
frobozz=no
endif
设置“frobozz”的值为“yes”
foo=
ifdef foo
frobozz=yes
else
frobozz=no
endif
设置“frobozz”的值为“No”
Archiver|手机版|小黑屋|52RD我爱研发网 ( 沪ICP备2022007804号-2 )
GMT+8, 2024-11-24 08:32 , Processed in 0.047429 second(s), 18 queries , Gzip On.
Powered by Discuz! X3.5
© 2001-2023 Discuz! Team.