Makefile – 指令
有许多不同形式的指令可用。您系统中的 make 程序可能不支持所有的指令。所以请检查您的 make 是否支持我们在这里解释的指令。 GNU make 支持这些指令。
条件性指令
条件性指令是–
- ifeq 指令是条件的开始,并指定了条件。它包含两个参数,用逗号隔开,周围用圆括号包围。对两个参数进行变量替换,然后对它们进行比较。如果两个参数匹配,则服从ifeq后面的makefile行;否则,它们被忽略。
-
ifneq 指令是条件的开始,并指定了条件。它包含两个参数,用逗号隔开,周围用圆括号包围。对两个参数进行变量替换,然后对它们进行比较。如果两个参数不匹配,则服从ifneq后面的makefile行;否则,它们被忽略。
-
ifdef 指令是条件的开始,并指定了条件。它包含一个参数。如果给定的参数为真,则条件变为真。
-
ifndef 指令开始了条件,并指定了条件。它包含单个参数。如果给定的参数是假的,那么条件就变成了真。
-
如果前面的条件失败, else 指令会导致下面的行被遵守。在上面的例子中,这意味着只要不使用第一个替代命令,就使用第二个替代链接命令。条件中的else是可选的。
-
endif 指令结束条件。每个条件都必须以endif结束。
条件式指令的语法
一个没有else的简单条件的语法如下:
text-if-true可以是任何行的文本,如果条件为真,将被视为makefile的一部分。如果条件为假,则不使用任何文本。
一个复杂的条件的语法如下
如果条件为真,就使用text-if-true;否则就使用text-if-false。text-if-false可以是任何行数的文本。
无论条件是简单的还是复杂的,conditional-directive的语法都是一样的。有四个不同的指令来测试各种条件。它们是:-
上述条件的反面指示如下
条件指令的例子
include指令
include指令 允许 make 暂停读取当前的makefile,并在继续之前读取一个或多个其他makefile。该指令是makefile中的一行,其内容如下
文件名可以包含shell文件名模式。允许在行首有额外的空格并被忽略,但不允许有制表符。例如,如果你有三个.mk'文件,即
a.mk’、b.mk'和
c.mk’,$(bar)则扩展为bish bash,然后是下面的表达。
当 make 处理一个include指令时,它暂停读取makefile文件,并依次读取每个列出的文件。当这一切完成后, make 重新开始读取指令所在的makefile文件。
override指令
如果一个变量已经通过命令参数进行了设置,那么makefile中的普通赋值将被忽略。如果你想在makefile中设置该变量,即使它是用命令参数设置的,你可以使用覆盖指令,这一行看起来如下