找回密码
 注册
搜索

19. make之五(makefile与条件语句)

已有 257 次阅读2014-2-6 17:39 |个人分类:Linux编程| make, makefile, 条件语句, linux编程, Linux编程

       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

 


路过

雷人

握手

鲜花

鸡蛋

评论 (0 个评论)

facelist

您需要登录后才可以评论 登录 | 注册

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.

返回顶部