Makefile 的条件表达式。
语法:
或者:
1.ifeq。表示如果相等就执行,格式如下:
该关键字比较参数arg1和arg2的值是否相等,如果相同则表达式为真,否则为假
2.ifneq.表示如果不相等则执行,格式如下:
该关键字比较参数arg1和arg2的值是否相等,如果不同,则表达式为真,否则为假。
3.ifdef。表示如果值非空则执行,格式如下:
//因为尖括号无法在博文中显示,所以使用圆括号代替
ifdef (veriable-name)
该关键字判断变量(veriable-name)的值,如果非空,则表达式为真,否则为假。注意,ifdef只是测试一个变量是否有值,并不会吧变量扩展到当前位置。
4.ifndef表示如果值为空则执行,格式如下:
ifndef(veriable-name)
该关键字判断变量(veriable-name)的值如果为空则表达式为真,否则为假,该表达式同样不会将变量展开。
(confitional-diretive)所在的行中,多余的空格是被允许的,但不能以Tab键作为开始。而注释符
#同样也是安全的,else和endif关键字也一样,不能以Tab键开始。
例子:
var1 = 123
var2 = hello
all:
ifdef $var1
$var1 = hello
Endif
Ifeq($(var1) , $(var2)) #判断var1和var2的值
echo”they are equal !”
else
echo”they are not equal !”
endif
.PHONY :all
执行该makefile文件
make -s all
they are equal !
表达式实例。
CC = gcc
libs_for_gnu = -lgnu #使用gnu函数库
normal_libs =
objects = main.o list.o my_lib.o
app: $(objects)
ifeq ($(CC) , gcc)
$(CC) -o app $(objects) $(libs_for_gnu)
else
$(CC) -o app $(objects) $(normal_libs)
endif
main.o : main.c
$(CC) -c main.c
list.o : list.c
$(CC) -c list.c
my_lib.o : my_lib.c
$(CC) -c my_lib.c
该实例判断$(CC)变量是否是gcc。如果是,则使用gnu函数库链接目标文件。可执行程序app可以根据变量$(CC)的值来选取不同的函数库链接程序,当变量$(CC)是gcc时,目标app的规则是:
app:$(objects)
$(CC) -o app $(objects) $(libs_for_gnu)
当变量$(CC)不是gcc时例如(lcc),目标app的规则是:
app:$(objects)
$(CC) -o app $(objects) $(normal_libs)