Makefile学习(4)

这周学学条件判断的内容

 

1.语法

 

<conditional-directive>

<text-if-true>

endif

或者

<conditional-directive>

<text-if-true>

else

<text-if-false>

endif

 

其中<conditional-directive>表示条件关键字,这里的关键字有四个:ifeq  ifneq  ifdef  ifndef,具体说明如下:

ifeq:

语法:

ifeq(<arg1>,<arg2>)

ifeq '<arg1>' '<arg2>'

ifeq "<arg1>" "<arg2>"

ifeq "<arg1>" '<arg2>'

ifeq '<arg1>' "<arg2>"

比较参数arg1和arg2值是否相同。

ifneq:

语法:

ifneq(<arg1>,<arg2>)

ifneq '<arg1>' '<arg2>'

ifneq "<arg1>" "<arg2>"

ifneq "<arg1>" '<arg2>'

ifneq '<arg1>' "<arg2>"

比较参数arg1和arg2值是否相同。如果不同,则为真

 

ifdef:

语法:

ifdef<variable-name>

如果变量<variable-name>的值非空,那表达式为真,否之为假。

当然<variable-name>同样可以是一个函数的返回值。

注:ifdef只是测试一个变量是否有值,其并不会把 变量扩展到当前为止。

 

ifndef:

语法:

ifndef<variable-name>

意思与ifdef相反。

 

注:

  • 在<conditional-directive>这一行,不能以[Tab]键作为开始(不然就被认为是命令),但是可以有多余的空格。
  • else和endif也不能以[Tab]键开始。

 

2.示例说明

 

ifeq(判断$(CC)变量是否“gcc”):

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

  • 这个示例中,目标foo可以根据变量$(CC)值来选取不同的函数编辑程序。
  • 其中endif表示一个条件语句的结束,任何一个条件表达式都应该以endif结束。
  • 当我们的变量$(CC)是gcc时,目标foo的规则是

foo:$(objects)

$(CC) -o foo $(objects) $(libs_for_gcc)

  • 而当我们的变量$(CC)值不是gcc时(比如是cc),目标foo的规则是

foo:$(objects)

$(CC) -o foo $(objects) $(normal_libs)

 

ifdef:

bar=

foo=$(bar)

ifdef foo

frobozz=yes

else

frobozz=no

endif

说明:

foo非空,所以$frobozz的值为yes

 

foo=

ifdef foo

frobozz=yes

else

frobozz=no

endif

说明:

foo空,所以$frobozz的值为no

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(makefile)