条件指令和引入指令
条件指令
用来控制make执行流程的条件具有多种形式,比如“是否已定义”或“是否等于”。
条件指令的基本语法:
if-condition
text if the condition is true
else
text if the condition is false
endif
其中的if-condition
可以是:
ifdef
variable-name
ifndef
variable-name
ifeq
test
ifneq
test
在进行ifdef/ifndef
的测试时,不应该以$()
扩住variable-name
。test
可以表示成:"a" "b"
或者:(a,b)
。
条件处理指令可以用在宏定义和命令脚本中,还可以放在makefile的顶层。
在使用相等或者不等的条件判断时,经常发生“变量扩展后包含了非预期的空格”的情况,可以使用strip
函数去除空格。
ifeq "$(strip $(OPTIONS))" "-d"
COMPILATION_FLAGS += -DDEBUG
endif
include指令
一个makefile可以引入(include)其他文件。此功能常用来引入make头文件中所存放的共同的定义,或是用来自动产生依存的信息。
include
FILES
FILES
可以是多个文件,可以使用shell通配符以及变量。
当make看到include指令时,会对文件名中的通配符和变量进行扩展,然后寻找所需的文件。如果文件存在,就将文件的内容添加到此处;如果某个文件不存在,make会发出警告并且继续读取其余的makefile文件。
当所有的读取动作完成之后,make会从规则数据库中找出任何可用来跟新引入文件的规则。如果找到了一个相应的规则,make就会先更新引入文件。如果任何一个引入文件被更新,make接着会清除它的内部数据库并且重新读进引入文件。
如果完成读取、更新和重新读取的过程之后,仍有include指令因为文件不存在而执行失败,那么make显示错误状态并终止。