update Makefile.md

This commit is contained in:
shzhxh 2019-04-06 21:00:30 +08:00
parent 3a9a3e8a7b
commit 859b302323
2 changed files with 54 additions and 24 deletions

View File

@ -0,0 +1,11 @@
#### 简介
#### 语法
#### 选项
```
-d, --delete # 删除分支
-D # 等价于--delete --force
```

View File

@ -8,18 +8,17 @@
#### 总述
Makefile = 显示规则 + 隐晦规则 + 变量定义 + 文件指示 + 注释
Makefile = 显示规则 + 隐晦规则 + 变量定义 + 文件指示 + 注释
include
MAKEFILES使
#### 书写规则
规则 = 依赖关系 + 生成目标的方法
规则 = 依赖关系 + 生成目标的方法
targets: prerequisites
[TAB]command
VPATH vpath
伪目标:有的目标不是要生成文件,而只是一个标签,通过 '.PHONY:'来指定伪目标。
#### 书写命令
@ -33,8 +32,7 @@
- overridemake
- defineendef
- '\$@''\$<''\$^'
- $(var: a=b):获取变量var的值,用b代替词尾的a
#### 条件判断
@ -52,39 +50,57 @@ $(<function> <arguments>) # 调用函数function其中arguments为其参数
##### 字符串处理函数
```
$(filter <pattern...>,<text>) # 从字符串<text>中过滤出符合<pattern>模式的单词
$(wildcard <PATTERN...>) #在变量定义和函数引用时,使通配符有效
$(filter <pattern...>,<text>)
# 从字符串<text>中过滤出符合<pattern>模式的单词
$(filter-out)
$(findstring)
$(firstword)
$(patsubst PATTERN,REPLACEMENT,TEXT)
# 将TEXT中符合PATTERN的单词替换为PEPLACEMENT
$(sort)
$(strip)
$(subst)
$(wildcard <PATTERN...>)
# 在变量定义和函数引用时,让通配符代表的字符在变量中展开
$(word <n>,<text>) # 取字符串<text>中第<n>个单词
$(wordlist <ss>,<e>,<text>) # <ss>和<e>是单个数字,列出<text>里从序号<ss>到序号<e>之间的单词
$(wordlist <ss>,<e>,<text>)
# <ss>和<e>是单个数字,列出<text>里从序号<ss>到序号<e>之间的单词
$(words <text>) # 统计<text>里的单词个数
```
##### 文件名操作函数
```
$(addprefix <prefix>,<names...>) #把前缀<prefix>加到<names>中每个单词前面
$(addsuffix <suffix>,<names...>) #把后缀<suffix>加到<names>中每个单词后面
$(basename NAMES)
# 从文件名序列“NAMES…”中取出各个文件名的前缀部分
$(dir)
$(join)
$(notdir) # 去除路径
$(suffix)
```
##### 其它函数
```
foreach函数将<list>中的单词依次代入变量<var>,进而计算出一系列<text>的值
语法:$(foreach <var>,<list>,<text>)
if函数如果<condifion>为真,执行<then-part>,否则执行<else-part>
语法:$(if <condition>,<then-part>,[<else-part>])
$(foreach <var>,<list>,<text>)
# 将<list>中的单词依次代入变量<var>,进而计算出一系列<text>的值
$(if <condition>,<then-part>,[<else-part>])
# 如果<condifion>为真,执行<then-part>,否则执行<else-part>
$(call <expression>,<parm1>,<parm2>,...)
# 将参数代入<expression>并返回其值。expression中的$1、$2分别对应着parm1、parm2
eval函数text的内容将作为makefile的一部分而被make解析和执行
语法:$(eval text)
origin函数返回变量variable的来源
语法:$(origin <variable>)
patsubst函数将TEXT中符合PATTERN的单词替换为PEPLACEMENT
语法: $(patsubst PATTERN,REPLACEMENT,TEXT)
basename函数从文件名序列“NAMES…”中取出各个文件名的前缀部分
语法:$(basename NAMES…)
shell # 执行shell命令
$(eval text)
# text的内容将作为makefile的一部分而被make解析和执行
$(origin <variable>)
# 返回变量variable的来源
$(shell command) # 执行shell命令。可能影响系统性能不建议使用。
```
##### 控制make的函数
```
$(error <text ...>)
$(warning >text ...>)
```
#### make的运行
##### 退出码
@ -105,9 +121,12 @@ shell函数 # 执行shell命令
- dist
- TAGS
- checktest
- '.PHONY'
- '.DEFAULT'
- '.IGNORE'
#### 隐含规则
.SUFFIXES: .c .h .S 定义自己的后缀
.SUFFIXES: .c .h .S 定义自己的后缀
#### 更新函数库文件