欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Makefile语法

程序员文章站 2022-07-12 11:28:07
...
= := ?= += 的区别】
=   是最基本的赋值,make会将整个Makefile展开后,再决定变量的值,例:
        x = foo
        y = $(x) bar
        x = xyz
    在上例中,y的值将会是:xyz bar,而不是:foo bar
:=  是覆盖之前的值,变量的值决定于它在makefile中的位置,例:
        x := foo
        y := $(x) bar
        x := xyz
    在上例中,y的值将会是:foo bar,而不是:xyz bar
?=  是如果没有被赋值过就赋予等号后面的值
+=  是添加等号后面的值
【函数】
Makefile里的函数使用,和取变量的值类似,是以一个'$'开始,
然后是一个括号里面是函数名和需要的参数列表,多个变量用逗号隔开,像这样:
    return = $(functionname arg1,arg2,arg3,...)
可能这里的'$'更像是从某个地址取值类似的操作
【wildcard】
    SRC = $(wildcard *.c ./foo/*.c) 
搜索当前目录及./foo/下所有以.c结尾的文件,生成一个以空格间隔的文件名列表,
并赋值给SRC,当前目录文件只有文件名,子目录下的文件名包含路径信息,如./foor/bar.c
【notdir】
    SRC = $(notdir $(SOURCES))
去除所有的目录信息,SRC里的文件名列表将只有文件名
【patsubst】
    OBJ = $(patsubst %.c,%.o,$(SRC)) 
patsubst是patten substitude的缩写,匹配替代的意思,
这句是在SRC中找到所有.c结尾的文件,然后把所有的.c换成.o
【filter】
    RET = $(filter %.h %.c ...,$(SRC))
过滤掉字串SRC中不符合模式%.h,%.c的单词,保留所有符合模式的单词,可以使用多个模式,
模式中一般需要包含模式字符"%",存在多个模式时,模式表达式之间使用空格分开,例如:
    sources := foo.c bar.c baz.s ugh.h
    ret = $(filter %.c %.s, $(sources)
返回值为:foo.c bar.c baz.s

上一篇: Makefile语法

下一篇: Makefile语法