makefile 的 一些常用函数、指令选项

函数

  • 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>)

查找 中的单词(单词以“空格”、“Tab”或“回车”“换行”分隔)是否符
合模式,如果匹配的话,则以替换。函数返回被替换过后的字符串。
例:

$(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 所在的绝对路径。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值