扫码一下
查看教程更方便
有许多以各种形式提供的指令。 我们系统上的 make 程序可能不支持所有指令。 所以请检查你的版本是否支持我们在这里解释的指令。 GNU make 支持这些指令。
条件指令是
ifeq
之后的 makefile 行; 否则它们将被忽略。ifneq
之后的 makefile 行; 否则它们将被忽略。没有 else 的简单条件语句的语法如下
conditional-directive
text-if-true
endif
text-if-true
可以是任何文本行,如果条件为真,将被视为 makefile 的一部分。 如果条件为假,则不使用任何文本。
复杂条件的语法如下
conditional-directive
text-if-true
else
text-if-false
endif
如果条件为真,则使用 text-if-true
; 否则,使用 text-if-false
。 text-if-false
可以是任意数量的文本行。
无论条件是简单还是复杂,条件指令的语法都是相同的。 有四种不同的指令可以测试各种条件。 他们是给定的
ifeq (arg1, arg2)
ifeq 'arg1' 'arg2'
ifeq "arg1" "arg2"
ifeq "arg1" 'arg2'
ifeq 'arg1' "arg2"
上述条件的相反指令如下
ifneq (arg1, arg2)
ifneq 'arg1' 'arg2'
ifneq "arg1" "arg2"
ifneq "arg1" 'arg2'
ifneq 'arg1' "arg2"
条件指令示例
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
include
指令允许 make 暂停读取当前 makefile 并在继续之前读取一个或多个其他 makefile。 该指令是 makefile 中的一行,如下所示
include filenames...
文件名可以包含 shell 文件名模式。 允许并忽略行首的额外空格,但不允许使用制表符。 例如,如果我们有三个“**.mk”文件,即“a.mk”、“b.mk”和“c.mk**”,以及 $(bar)
那么它会扩展为 bish bash,然后是以下内容 表达。
include foo *.mk $(bar)
is equivalent to:
include foo a.mk b.mk c.mk bish bash
当 make 处理 include
指令时,它会暂停读取 makefile 并依次从每个列出的文件中读取。 完成后,make 继续读取指令出现的 makefile。
如果已使用命令参数设置变量,则忽略 makefile 中的普通赋值。 如果你想在 makefile 中设置变量,即使它是用命令参数设置的,你可以使用覆盖指令,它是如下一行:
override variable = value
或者
override variable := value