Makefile – 指令

Makefile中有许多指令可用,如条件指令、include指令等。

条件指令

条件指令起的作用与c语言中的if语句类似。

  • ifeq – 如果条件相等
  • ifneq – 如果条件不相等
  • ifdef – 如果条件已经定义(为真)
  • ifndef – 如果条件未定义(为假)
  • else – 如不满足条件
  • endif – 结束条件指令

条件指令的语法

简单条件句的语法如下:

if-directive
   text-if-true
endif

text-if-true可以是任意文本,如果条件为true,则被视为makefile的一部分。如果条件为false,则不使用文本。

复合条件句的语法如下:

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

include指令允许make导入其他makefile文件内容,作为当前makefile一部分。

include 文件名...

文件名可以包含shell文件名模式(如*.mk),在行首允许有空格,但不允许有制表符。

例如,如果你有3个.mk 文件,即a.mk, b.mk, c.mk, 然后$(var)的值为 ddd eee

include fff *.mk $(var)

可转换为:

include fff a.mk b.mk c.mk ddd eee

make处理include指令时,会暂停对当前makefile的读取,先处理include指令导入的文件内容,完成后再继续处理当前makefile的内容。

override 指令

如果使用命令行参数设置了变量,则会忽略makefile中的变量赋值。
如果在上述情况下,你仍想让makefile中变量赋值生效,可以使用override指令,如下所示:

override var = value

或者

override var := value


浙ICP备17015664号 浙公网安备 33011002012336号 联系我们 网站地图  
@2019 qikegu.com 版权所有,禁止转载