跟我一起写Makefile 读书笔记

12 篇文章 0 订阅
.PHONY 伪目标 
.  % 
.静态模式
目标:目标模式:依赖模式
$< 表示依赖目标集 $@ 表示目标集
. @命令 显示命令
 make [-n|--just-print] 只显示命令,调试makefile
-s --silent 全面禁止命令显示
. shell 命令用; 隔开才起作用
"-" 忽略命令出错 如-rm -f *.o
make -i --ignore-errors 全局忽略出错
以 .IGNORE 为目标的
-k --keep-going 若规则出错,终止该规则,继续其他规则
.嵌套执行
export 变量
-w 参数显示目录信息
.定义命令包
define 名字
(Tab) command
endef
.变量
变量的命名字可以包含字符、数字,下划线(可以是数字开头),但不应该含有“:”,“#”,“=”或是空字
符(空格、回车等)
变量的变量 最好用":="定义, 因为"="可以使用后面定义的变量 "+="追加变量值 "?="未定义变量就赋值
使用 #的方法来定义一个空格变量
变量替换: ${var:a=b}
把变量的值再当变量 可以用在操作符的左右两边 
.override 
如果有变量是通常 make 的命令行参数设置的,那么 Makefile 中对这个变量的赋值会被忽略。如果
你想在 Makefile 中设置这类参数的值,那么,你可以使用“override”指示符。
.目标变量

.函数
${<function> <arguments>} 参数间以逗号“,”分隔,而函数名和参数之间以“空格”分隔
1) subst
   $(subst <from>,<to>,<text>) 把字串<text>中的<from>字符串替换成<to>。
2) 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”
3) strip
  $(strip <string>) 去掉<string>字串中开头和结尾的空字符。
4) findstring
  $(findstring <find>,<in>) 功能:在字串<in>中查找<find>字串。
    返回:如果找到,那么返回<find>,否则返回空字符串。
5) filter
  $(filter <pattern...>,<text>) 以<pattern>模式过滤<text>字符串中的单词,
保留符合模式<pattern>的单词。可以有多个模式。
6) filter-out
  $(filter-out <pattern...>,<text>) 以<pattern>模式过滤<text>字符串中的单词,
去除符合模式<pattern>的单词。可以有多个模式
7) sort
  $(sort <list>) 给字符串<list>中的单词排序(升序)。备注:sort 函数会去掉<list>中相同的单词。
8) word
  $(word <n>,<text>) 取字符串<text>中第<n>个单词。(从一开始)
9) wordlist
  $(wordlist <s>,<e>,<text>) 从字符串<text>中取从<s>开始到<e>的单词串。<s>和<e>是一个数字。
10) words
  $(words <text>) 统计<text>中字符串中的单词个数。备注:如果我们要取<text>中最后的一个单
词,我们可以这样:$(word $(words <text>),<text>)。
11) firstword
  $(firstword <text>) 取字符串<text>中的第一个单词。
override CFLAGS += $(patsubst %,-I%,$(subst :, ,$(VPATH)))
如 果 我 们 的 “$(VPATH)” 值 是 “src:../headers” , 那 么 
“$(patsubst%,-I%,$(subst :, ,$(VPATH)))”将返回“-Isrc -I../headers”,
这正是 cc 或 gcc 搜索头文件路径的参数。
文件名操作函数
1. dir
  $(dir <names...>) 从文件名序列<names>中取出目录部分。
2. notdir
  $(notdir <names...>) 从文件名序列<names>中取出非目录部分。就是文件名
3. suffix
  $(suffix <names...>) 从文件名序列<names>中取出各个文件名的后缀。
4. basename
  $(basename <names...>) 从文件名序列<names>中取出各个文件名的后缀。
5. addsuffix
  $(addsuffix <suffix>,<names...>) 把后缀<suffix>加到<names>中的每个单词后面。
6. addprefix
  $(addprefix <prefix>,<names...>) 把前缀<prefix>加到<names>中的每个单词后面。
7. join
  $(join <list1>,<list2>) 把<list2>中的单词对应地加到<list1>的单词后面。如果<list1>的单
  词个数要比<list2>的多,那么,<list1>中的多出来的单词将保持原样。如果<list2>的单个数要比
  <list1>多,那么,<list2>多出来的单词将被复制到<list2>中。
8. foreach 函数
  $(foreach <var>,<list>,<text>) 
  names := a b c d
  files := $(foreach n,$(names),$(n).o)
  上面的例子中,$(name)中的单词会被挨个取出,并存到变量“n”中,“$(n).o”每次
  根据“$(n)”计算出一个值,这些值以空格分隔,最后作为 foreach 函数的返回,所以,
  $(files)的值是“a.o b.o c.o d.o”。
9. if
  $(if <condition>,<then-part>) $(if <condition>,<then-part>,<else-part>)
  如果<condition>为真(非空字符串),那个<then-part>会是整个函数的返回值,如果<condition>为
  假(空字符串),那么<else-part>会是整个函数的返回值,此时如果<else-part>没有被定义,那么,
  整个函数返回空字串。
10. call
 $(call <expression>,<parm1>,<parm2>,<parm3>...) 
 如:
reverse = $(2) $(1)
foo = $(call reverse,a,b) 此时的 foo 的值就是“b a”。
11. origin
  $(origin <variable>) 
  返回值:undefined, default, file, command line, override, automatic
12. shell
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值