插播!插播!插播!亲爱的朋友们,我们的Makefile课程上线啦!感兴趣的小伙伴可以去下面的链接学习哦~
https://edu.csdn.net/course/detail/39264
条件语句可以根据一个变量的值来控制 make 执行或者忽略 Makefile 的特定部分。 条件语句可以是两个不同变量、或者变量和常量值的比较。要注意的是:条件语句只能 用于控制 make 实际执行的 makefile 文件部分,它不能控制规则的 shell 命令执行过程。 Makefile 中使用条件控制可以做到处理的灵活性和高效性。
3.1条件判断的基本语法
条件判断语句的语法格式为:
ifeq/ifneq(ARG1,ARG2)
TEXT-IF-TRUE
else
TEXT-IF-FALSE
endif
表达式中“TEXT-IF-TRUE”可以是若干任何文本行,表示了如果条件为真,则将“TEXT-IF-TRUE”作为执行 Makefile 的一部分,否则将 “TEXT-IF-FALSE”作为执行的 Makefile 的一部分。
3.2关键字 “ifeq”
“ifeq”表示条件语句的开始,此关键字用来判断参数是否相等,格式如下:
ifeq (ARG1, ARG2)
对它们的值进行比较。如果相同则(条件为 真)将“TEXT-IF-TRUE”作为 make 要执行的一部分,否则将“TEXT-IF-FALSE”作 为 make 要执行的一部分。
3.3 关键字 “ifneq"
“ifneq”同样表示条件语句的开始,此关键字用来判断参数是否不相等,格式如下:
ifneq (ARG1, ARG2)
关键字“ifneq”实现的条件判断语句和“ifeq”相反。首先替换并展开“ARG1”和“ARG1”,
对它们的值进行比较。如果不相同(条件为真)则将“TEXT-IF-TRUE”作为make要执行的一部分,否则将“TEXT-IF-FALSE”作为make要执行的一部分。
3.4 关键字 “else"
“else”之后就是当条件不满足时的执行部分。不是所有的条件语句都需要此部分。
3.5 关键字 ”endif"
“endif”表示一个条件语句的结束,任何一个条件表达式都必须以“endif”结束。
举例说明:
.PHONY:all
OBJ = true
ifeq($(OBJ),true)
CC = gcc
else
CC = g++
endif
all:
@echo "$(CC)"
上例说明如果OBJ等于true,则打印出gcc,不等于则打印g++,可见终端会打印出gcc,而倘若将关键字ifeq换成关键字ifneq,则反之,终端会打印出g++。