doc: update make.md (#215)
This commit is contained in:
parent
b07df71f57
commit
403838287e
127
docs/make.md
127
docs/make.md
@ -369,6 +369,35 @@ run:
|
||||
书写规则
|
||||
---
|
||||
|
||||
### 文件搜寻(`vpath`)
|
||||
<!--rehype:wrap-class=col-span-3-->
|
||||
|
||||
如果没有指定 vpath 变量,make 只会在当前的目录中去寻找依赖文件和目标文件。否则,如果当前目录没有,就会到指定的目录中去寻找
|
||||
|
||||
:- | :-
|
||||
:- | :-
|
||||
`vpath <pattern> <directories>` | 为符合模式 \<pattern> 的文件指定搜索目录 \<directories>
|
||||
`vpath <pattern>` | 清除符合模式 \<pattern> 的文件的搜索目录。
|
||||
`vpath` | 清除所有已被设置好了的文件搜索目录
|
||||
|
||||
#### `%`
|
||||
|
||||
* vpath 使用方法中的 \<pattern> 需要包含 `%` 字符。`%` 的意思是匹配零或若干字符(类似于**通配符**),并且引用规则是需要使用**自动变量**
|
||||
|
||||
```makefile
|
||||
vpath %.c dist
|
||||
TARGET = hello
|
||||
OBJ = bar.o foo.o
|
||||
|
||||
$(TARGET): $(OBJ)
|
||||
$(CC) -o $@ $^
|
||||
|
||||
%.o: $.c
|
||||
$(CC) -o $< -o #@
|
||||
```
|
||||
|
||||
<!--rehype:className=auto-wrap-->
|
||||
|
||||
### 通配符
|
||||
|
||||
#### `*`
|
||||
@ -399,36 +428,6 @@ run:
|
||||
ls -ll packag?.json
|
||||
```
|
||||
|
||||
### 文件搜寻(`vpath`)
|
||||
|
||||
如果没有指定 vpath 变量,make 只会在当前的目录中去寻找依赖文件和目标文件。否则,如果当前目录没有,就会到指定的目录中去寻找
|
||||
|
||||
:- | :-
|
||||
:- | :-
|
||||
`vpath <pattern> <directories>` | 为符合模式 \<pattern> 的文件指定搜索目录 \<directories>
|
||||
`vpath <pattern>` | 清除符合模式 \<pattern> 的文件的搜索目录。
|
||||
`vpath` | 清除所有已被设置好了的文件搜索目录
|
||||
|
||||
#### `%`
|
||||
|
||||
* vpath使用方法中的 \<pattern> 需要包含 `%` 字符。
|
||||
* `%` 的意思是匹配零或若干字符
|
||||
* 并且引用规则是需要使用**自动变量**
|
||||
|
||||
```makefile
|
||||
vpath %.c dist
|
||||
TARGET = hello
|
||||
OBJ = bar.o foo.o
|
||||
|
||||
$(TARGET): $(OBJ)
|
||||
$(CC) -o $@ $^
|
||||
|
||||
%.o: $.c
|
||||
$(CC) -o $< -o #@
|
||||
```
|
||||
|
||||
<!--rehype:className=auto-wrap-->
|
||||
|
||||
### 静态模式
|
||||
|
||||
```makefile
|
||||
@ -469,6 +468,20 @@ clean :
|
||||
rm *.o temp
|
||||
```
|
||||
|
||||
### 约定俗成的规则
|
||||
<!--rehype:wrap-class=col-span-2-->
|
||||
|
||||
:- | :-
|
||||
:- | :-
|
||||
`all` | 该伪目标是所有目标的目标,一般用于编译所有的目标
|
||||
`clean` | 该伪目标用于删除所有由 make 创建的文件
|
||||
`install` | 该伪目标用于安装已编译好的程序,即将目标执行文件拷贝到指定目标中
|
||||
`print` | 该伪目标用于例出改变过的源文件
|
||||
`tar` | 该伪目标用于把源程序打包备份为 tar 文件
|
||||
`dist` | 该伪目标用于创建压缩文件,一般将 tar 文件压成 Z 或 gz 文件
|
||||
`TAGS` | 该伪目标用于更新所有的目标,以备完整地重编译使用
|
||||
`check/test` | 这两个伪目标用于测试 makefile 的流程
|
||||
|
||||
<!--rehype:className=style-round-->
|
||||
<!--rehype:className=auto-wrap-->
|
||||
|
||||
@ -535,6 +548,60 @@ exec:
|
||||
cd /home/hchen; pwd
|
||||
```
|
||||
|
||||
### make 参数
|
||||
<!--rehype:wrap-class=col-span-3-->
|
||||
|
||||
:- | :-
|
||||
:- | :-
|
||||
`-b`,`-m` | 忽略和其它版本make的兼容性
|
||||
`-B` | (`--always-make`) 认为所有的目标都需要重编译
|
||||
`-C <dir>` | (`--directory=<dir>`) 指定读取makefile的目录
|
||||
`-e` | (`--environment-overrides`) 指明环境变量的值覆盖 makefile 中定义的变量的值
|
||||
`-f=<file>` | 指定需要执行的makefile
|
||||
`-h` | 显示帮助信息
|
||||
`-i` | (`--ignore-errors`)在执行时忽略所有的错误
|
||||
`-I <dir>` | (`--include-dir=<dir>`) 指定一个被包含 makefile 的搜索目标
|
||||
`-j [<nums>]` | (`--jobs[=<jobsnum>]`)指同时运行命令的个数
|
||||
`-k` | (`--keep-going`)出错也不停止运行
|
||||
`-l <load>` | `--load-average[=<load>]`、`-max-load[=<load>]` 指定make运行命令的负载
|
||||
`-n` | (`--just-print`, `--dry-run`, `--recon`) 仅输出执行过程中的命令序列,但不执行
|
||||
`-o <file>` | (`--old-file=<file>`, `--assume-old=<file>`)不重新生成的指定的 \<file>,即使目标的依赖文件新于它
|
||||
`-p` | (`--print-data-base`) 输出 makefile 中的所有数据,包括所有的规则和变量
|
||||
`-q` | (`--question`) 不运行命令,也不输出。仅仅是检查所指定的目标是否需要更新
|
||||
`-r` | (`--no-builtin-rules`) 禁止 make 使用任何隐含规则
|
||||
`-R` | (`--no-builtin-variabes`) 禁止 make 使用任何作用于变量上的隐含规则
|
||||
`-s` | (`--silent`,`--quiet`) 在命令运行时不输出命令的输出
|
||||
`-S` | (`--no-keep-going`, `--stop`) 取消“-k”选项的作用
|
||||
`-t` | `--touch` 相当于 UNIX 的 touch 命令,只是把目标的修改日期变成最新的,也就是阻止生成目标的命令运行
|
||||
`-v` | (`--version`) 输出 make 程序的版本、版权等关于 make 的信息
|
||||
`-w` | (`--print-directory`) 输出运行 makefile 之前和之后的信息。`--no-print-directory` 可以禁止 `-w`
|
||||
`-W <file>` | `--what-if=<file>`, `--new-file=<file>`, `--assume-file=<file>` 假定目标 \<file> 需要更新,如果和 `-n` 选项使用,那么这个参数会输出该目标更新时的运行动作
|
||||
`--warn-undefined-variables` | 只要 make 发现有未定义的变量,那么就输出警告信息
|
||||
<!--rehype:className=left-align-->
|
||||
|
||||
### `-debug[=<options>]`
|
||||
<!--rehype:wrap-class=col-span-2-->
|
||||
|
||||
输出 make 的调试信息。下面是 \<options>的取值:
|
||||
|
||||
options | :-
|
||||
:- | :-
|
||||
`a` | `all`,输出所有的调试信息
|
||||
`b` | `basic`,只输出简单的调试信息。即输出不需要重编译的目标
|
||||
`v` | `verbose`,包括 b 的信息。输出包括 makefile 被解析的信息,不需要被重编译的依赖文件等
|
||||
`i` | `implicit`,输出所有的隐含规则
|
||||
`j` | `jobs`,输出执行规则中命令的详细信息,如命令的 PID、返回码等
|
||||
`m` | `makefile`,输出 make 读取 makefile,更新 makefile,执行 makefile 的信息
|
||||
<!--rehype:className=left-align-->
|
||||
|
||||
### make 的退出码
|
||||
|
||||
:- | :-
|
||||
:- | :-
|
||||
`0` | 成功执行
|
||||
`1` | 运行时出现错误
|
||||
`2` | 使用了 `-q` 选项,并且一些目标不需要更新
|
||||
|
||||
判断和循环
|
||||
---
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user