Makefile – 指令

Makefile – 指令

有许多不同形式的指令可用。您系统中的 make 程序可能不支持所有的指令。所以请检查您的 make 是否支持我们在这里解释的指令。 GNU make 支持这些指令。

条件性指令

条件性指令是–

  • ifeq 指令是条件的开始,并指定了条件。它包含两个参数,用逗号隔开,周围用圆括号包围。对两个参数进行变量替换,然后对它们进行比较。如果两个参数匹配,则服从ifeq后面的makefile行;否则,它们被忽略。

  • ifneq 指令是条件的开始,并指定了条件。它包含两个参数,用逗号隔开,周围用圆括号包围。对两个参数进行变量替换,然后对它们进行比较。如果两个参数不匹配,则服从ifneq后面的makefile行;否则,它们被忽略。

  • ifdef 指令是条件的开始,并指定了条件。它包含一个参数。如果给定的参数为真,则条件变为真。

  • ifndef 指令开始了条件,并指定了条件。它包含单个参数。如果给定的参数是假的,那么条件就变成了真。

  • 如果前面的条件失败, else 指令会导致下面的行被遵守。在上面的例子中,这意味着只要不使用第一个替代命令,就使用第二个替代链接命令。条件中的else是可选的。

  • endif 指令结束条件。每个条件都必须以endif结束。

条件式指令的语法

一个没有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可以是任何行数的文本。

无论条件是简单的还是复杂的,conditional-directive的语法都是一样的。有四个不同的指令来测试各种条件。它们是:-

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指令

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文件。

override指令

如果一个变量已经通过命令参数进行了设置,那么makefile中的普通赋值将被忽略。如果你想在makefile中设置该变量,即使它是用命令参数设置的,你可以使用覆盖指令,这一行看起来如下

override variable = value

or

override variable := value

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程