函数
- 1、filter
过滤函数
$(filter <pattern...>,<text>)
filter 函数表示以 pattern 模式过滤 text 字符串中的单词,仅保留符合模式 pattern 的单词,
可以有多个模式。函数返回值就是符合 pattern 的字符串。
例:
$(filter %.o,$(files))
sources := foo.c bar.c baz.s ugh.h
$(filter %.c %.s,$(sources)) 返回的值是 foo.c bar.c baz.s
- 2、filter-out
反过滤函数
$(filter-out <pattern...>,<text>)
模式过滤
例:
objects = main1.o foo.o main2.o bar.o
mains = main1.o main2.o
$(filter-out $(mains),$(objects)) 返回值是“foo.o bar.o”
- 3、firstword
首单词函数
$(firstword <text>)
返回字符串
$(firstword foo bar) 返回值是“foo”
利用 word 函数实现同样效果,如下:
$(word 1,<text>)
- 4、shell
$(shell shell指令)
参数应该就是操作系统 Shell 的命令。
它和反引号“`”是相同的功能。
把执行操作系统命令后的输出作为函数返回。
注意,这个函数会新生成一个 Shell 程序来执行命令,所以你要注意其运行性能,如果你的
Makefile 中有一些比较复杂的规则,并大量使用了这个函数,那么对于你的系统性能是有
害的。
- 5、words
单词个数统计函数
$(words <text>)
返回 < text > 中的单词数
例:
$(words, foo bar baz) 返回值是 3 。
- 6、patsubst
模式字符串替换函数
$(patsubst <pattern>,<replacement>,<text>)
查找
合模式,如果匹配的话,则以替换。函数返回被替换过后的字符串。
例:
$(patsubst %.c,%.o,x.c.c bar.c)
把字串“x.c.c bar.c”符合模式[%.c]的单词替换成[%.o],返回结果是“x.c.o bar.o”
- 7、origin
告诉你这个变量是从哪里来的
$(origin <variable>)
是变量的名字,不应该是引用,不要加 “ $ ”。Origin 函数以其返回值来说明这个变量的 “ 出生情况 ”。
函数的返回值 :
“undefined” <variable>从来没有定义过。
“default” <variable>是一个默认的定义,比如“CC”这个变量。
“environment” <variable>是一个环境变量, 并且当 Makefile 被执行时, “-e”
参数没有被打开。(如果 make 指定了“-e”参数,那么,系统环境变
量将覆盖 Makefile 中定义的变量)
“file” <variable>这个变量被定义在 Makefile 中。
“command line” <variable>这个变量是被命令行定义的。
“override” <variable>是被 override 指示符重新定义的。
“automatic” <variable>是一个命令运行中的自动化变量。
其它
-
1、
make -v
查看 make 工具的版本号,ubuntu16.04里面默认自带的make工具版本号为4.1,
也可以用变量$(MAKE_VERSION)
表示。 -
2、sinclude 和 include 的功能类似,在 Makefile 中都是读取指定文件内容,sinclude 读取的文件如果不存在的话不会报错。
-
3、
make -f 文件名
使用自己指定的makefile文件。 -
4、
make -C subdir
执行子目录 subdir 下的 Makefile。 -
5、变量的传递
export varible,... 导出变量到子 Makefile
unexport varible, ... 不导出变量
有连个特殊的变量,SHELL 和 MAKEFLAGS,这两个变量除非使用 unexport 声明,默认是会像下一级 Makefile 传递的。
- 6、
make -s
静默编译,编译时不输出任何信息。 - 7、变量:
CURDIR
自动保存当前 Makefile 所在的绝对路径。