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