3. 条件判断

在 Makefile 中可以使用条件判断的方式来执行某个命令或某些变量创建或变量赋值等操作。

Makefile 条件判断的语法

条件判断有三种语法:

1、只有一个执行部分的语法

条件指示
# ... 条件指示为真时(成立时)执行的部分
endif

2、有两个执行部分二选一的语法

条件指示
# ... 条件指示为真时(成立时)执行的部分
else
# ... 条件指示为假时(不成立时)执行的部分
endif

3、有三个执行部分三选一的语法

条件指示1
# ... 条件指示1为真时(成立时)执行的部分
else 条件指示2
# ... 条件指示2为真时(成立时)执行的部分
else
# ... 条件指示1和条件指示2都为假时执行的部分
endif

条件指示时判断时,根据真(成立)和假(不成立)的值决定下面的部分是否执行。

条件指示也有三种:

  1. 根据两个值是否相等进行条件判断
  2. 根据是否已经定义某个变量进行条件判断
  3. 根据是否没有定义某个变量进行条件判断

1、 根据两个值是否相等进行判断的语法:

ifeq (arg1, arg2)
ifeq 'arg1' 'arg2'
ifeq "arg1" "arg2"
ifeq "arg1" 'arg2'
ifeq 'arg1' "arg2"

其中 arg1 和 arg2 都是字符串值,两个字符串的值相等返回,否则返回

2、 根据是否已经定义某个变量进行判断的语法:

ifdef 变量名

如果变量已经定义则返回,否则返回

3、 根据是否没有定义某个变量进行判断的语法:

ifndef 变量名

如果变量没有定义则返回,否则返回

示例:

1、根据 OS 变量的值来决定如何执行相应的命令

# 修改成当前的操作系统
OS :=Windows
MEMORY :=

all:
ifeq ($(OS),Windows)
    @echo "OS is Windows"
else ifeq ($(OS), MacOS)
    @echo "OS is MacOS"
else
    @echo "OS is other"
endif
ifeq ($(MEMORY),)  #判断变量的值为空
    @echo "MEMORY is not set"
endif

2、根据是否定义变量执行相应的命令

A := aaaa

all:
ifdef A
    @echo "A is exist, value is $(A)"
else
    @echo "A is not exist"
endif
ifndef B
    @echo "B is not exist"
else
    @echo "B is exist, value is $(B)"
endif