Makefile 指令 - Makefile
有好几种指令以不同的形式。让程序可能不支持所有指令。因此,请检查make是否支持指令,我们这里解释。 GNU make支持这些指令
条件指令
条件的指令
ifeq 指令开始的条件,指定的条件。它包含两个参数,用逗号分隔,并用括号括起。两个参数进行变量替换,然后对它们进行比较。该行的makefile继IFEQ的服从如果两个参数的匹配,否则会被忽略。
ifneq 指令开始的条件,指定的条件。它包含两个参数,用逗号分隔,并用括号括起。两个参数进行变量替换,然后对它们进行比较。makefile ifneq 遵守如果两个参数不匹配,否则会被忽略。
ifdef 指令开始的条件,指定的条件。它包含单参数。如果给定的参数为真,则条件为真。
ifndef 指令开始的条件,指定的条件。它包含单参数。如果给定的是假的,那么条件为真。
else 指令会导致以下行如果前面的条件未能被遵守。在上面的例子中,这意味着第二个选择连接命令时使用的第一种选择是不使用。它是可选的,在有条件有一个else。
endif 指令结束条件。每一个条件必须与endif结束。
条件式指令的语法
一个简单的条件,没有其他的语法如下:
conditional-directive
text-if-true
endif
文本如果真可以是任何行文字,被视为makefile文件的一部分,如果条件为真。如果条件是假的,没有文字来代替。
一个复杂的语法条件如下:
conditional-directive
text-if-true
else
text-if-false
endif
如果条件为真时,文本,如果真正的使用,否则,如果假文本来代替。的文本,如果错误的数量可以是任意的文本行。
有条件的指令的语法是相同的,无论是简单或复杂的条件。有四种不同的测试不同条件下的指令。这里是一个表:
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',
.mk' files, a.mk',
b.mk', and `c.mk', and $(bar) 扩展到bash中,然后下面的表达式。
include foo *.mk $(bar)
is equivalent to
include foo a.mk b.mk c.mk bish bash
当MAKE处理包括指令,它包含的makefile暂停读取,并从各列出文件中依次读取。当这个过程完成,使读取指令出现在其中的makefile的恢复。
override 指令
如果一个变量已经设置的命令参数,在makefile中被忽略的普通任务。如果要设置makefile的变量,即使它被设置的命令参数,可以使用一个override指令,这是一行看起来像这样:
override variable = value
or
override variable := value