update make.md
This commit is contained in:
parent
80da054f4f
commit
3a9a3e8a7b
|
@ -9,17 +9,17 @@
|
|||
#### 总述
|
||||
|
||||
Makefile = 显示规则 + 隐晦规则 + 变量定义 + 文件指示 + 注释
|
||||
引用文件:include
|
||||
环境变量:MAKEFILES(建议不要使用)
|
||||
引用文件:include
|
||||
环境变量:MAKEFILES(建议不要使用)
|
||||
|
||||
#### 书写规则
|
||||
|
||||
规则 = 依赖关系 + 生成目标的方法
|
||||
语法:
|
||||
targets: prerequisites
|
||||
[TAB]command
|
||||
文件路径: VPATH vpath
|
||||
伪目标:有的目标不是要生成文件,而只是一个标签,通过 '.PHONY:'来指定伪目标。
|
||||
语法:
|
||||
targets: prerequisites
|
||||
[TAB]command
|
||||
文件路径: VPATH vpath
|
||||
伪目标:有的目标不是要生成文件,而只是一个标签,通过 '.PHONY:'来指定伪目标。
|
||||
|
||||
#### 书写命令
|
||||
|
||||
|
@ -32,7 +32,7 @@
|
|||
- '+='表示给变量追加值
|
||||
- override用于设置命令行里由make指定的参数
|
||||
- define关键字用于设置多行变量,末尾以endef结束。
|
||||
- '\$@'目标文件集,'\$<','\$^'
|
||||
- '\$@'目标文件集,'\$<'第一个依赖文件,'\$^'所有依赖文件
|
||||
|
||||
|
||||
|
||||
|
@ -42,6 +42,14 @@
|
|||
|
||||
#### 使用函数
|
||||
|
||||
函数调用的语法如下:
|
||||
|
||||
```
|
||||
$(<function> <arguments>) # 调用函数function,其中arguments为其参数
|
||||
```
|
||||
|
||||
|
||||
|
||||
##### 字符串处理函数
|
||||
```
|
||||
$(filter <pattern...>,<text>) # 从字符串<text>中过滤出符合<pattern>模式的单词
|
||||
|
@ -61,8 +69,10 @@ $(addsuffix <suffix>,<names...>) #把后缀<suffix>加到<names>中每个单词
|
|||
语法:$(foreach <var>,<list>,<text>)
|
||||
if函数:如果<condifion>为真,执行<then-part>,否则执行<else-part>
|
||||
语法:$(if <condition>,<then-part>,[<else-part>])
|
||||
call函数:将参数代入<expression>,并返回其值
|
||||
语法:$(call <expression>,<parm1>,<parm2>,...)
|
||||
|
||||
$(call <expression>,<parm1>,<parm2>,...)
|
||||
# 将参数代入<expression>,并返回其值。expression中的$1、$2分别对应着parm1、parm2
|
||||
|
||||
eval函数:text的内容将作为makefile的一部分而被make解析和执行
|
||||
语法:$(eval text)
|
||||
origin函数:返回变量variable的来源
|
||||
|
|
|
@ -73,7 +73,11 @@ SECTIONS命令告诉链接器如何把输入文件的sections映射到输出文
|
|||
3. 输出section的描述
|
||||
|
||||
```
|
||||
SECTION-NAME [ADDRESS] [(TYPE)] : [AT(LMA)]
|
||||
SECTION-NAME [ADDRESS] [(TYPE)] :
|
||||
[AT(LMA)]
|
||||
[ALIGN(section_align) | ALIGN_WITH_INPUT]
|
||||
[SUBALIGN(subsection_align)]
|
||||
[constraint]
|
||||
{
|
||||
OUTPUT-SECTION-COMMAND
|
||||
OUTPUT-SECTION-COMMAND
|
||||
|
@ -87,17 +91,23 @@ SECTIONS命令告诉链接器如何把输入文件的sections映射到输出文
|
|||
|
||||
OUTPUT-SECTION-COMMAND为以下四种之一:
|
||||
|
||||
- .符号赋值语句
|
||||
- .符号赋值语句,详见赋值语句
|
||||
|
||||
- .输入section描述
|
||||
- .输入section描述(它是最基本的操作,在OUTPUT-SECTION-COMMAND中最为常见)
|
||||
|
||||
用于把输入文件里指定的section包含到输出文件的section里,如果不包含某些输入文件则要使用EXCLUDE_FILE。
|
||||
|
||||
```
|
||||
FILENAME([EXCLUDE_FILE (FILENAME1 FILENAME2 ...) SECTION1 SECTION2 ...)
|
||||
```
|
||||
|
||||
输入section描述由文件名跟着圆括号内的section名组成。文件名和section名可以使用通配符模型。
|
||||
|
||||
EXCLUDE_FILE:用于指定不用来匹配的文件列表。
|
||||
|
||||
- .直接包含的数据值
|
||||
|
||||
- .一些特殊的输出section关键字
|
||||
- .特殊的输出section关键字
|
||||
|
||||
4. section覆盖描述
|
||||
|
||||
|
|
|
@ -1,3 +1,19 @@
|
|||
#### 原理
|
||||
|
||||
从根本上说,`make`工具建立的是文件之间相互依赖关系,即一些指定文件的更新触发某种动作。所以,处理文件之间这种依赖关系的问题,都可以用`make`命令。但`make`命令主要还是用在编译大型程序。
|
||||
|
||||
要使用`make`,必须要有makefile文件。make是干活的,而makefile告诉make如何干活。
|
||||
|
||||
`make`命令的执行过程如下:
|
||||
|
||||
1. 读入makefile。
|
||||
2. 读入被include的其它makefile。
|
||||
3. 初始化文件中的变量。
|
||||
4. 推导隐晦规则,并分析所有的规则。
|
||||
5. 创建文件之间的依赖关系链。
|
||||
6. 依据依赖关系判断需要重新生成的文件。
|
||||
7. 执行生成命令。
|
||||
|
||||
#### 语法
|
||||
|
||||
`make [OPTION] ... [TARGET] ...`
|
||||
|
|
Loading…
Reference in New Issue