update make.md

This commit is contained in:
shzhxh 2019-04-06 16:09:31 +08:00
parent 80da054f4f
commit 3a9a3e8a7b
3 changed files with 55 additions and 19 deletions

View File

@ -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 @@
- '+='
- overridemake
- defineendef
- '\$@''\$<''\$^'
- '\$@''\$<''\$^'
@ -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的来源

View File

@ -73,12 +73,16 @@ SECTIONS命令告诉链接器如何把输入文件的sections映射到输出文
3. 输出section的描述
```
SECTION-NAME [ADDRESS] [(TYPE)] : [AT(LMA)]
{
OUTPUT-SECTION-COMMAND
OUTPUT-SECTION-COMMAND
} [>REGION] [AT>LMA_REGION] [:PHDR HDR ...] [=FILLEXP]
SECTION-NAME [ADDRESS] [(TYPE)] :
[AT(LMA)]
[ALIGN(section_align) | ALIGN_WITH_INPUT]
[SUBALIGN(subsection_align)]
[constraint]
{
OUTPUT-SECTION-COMMAND
OUTPUT-SECTION-COMMAND
} [>REGION] [AT>LMA_REGION] [:PHDR HDR ...] [=FILLEXP]
```
SECTION-NAME输出section的名字
@ -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覆盖描述

View File

@ -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] ...`