LV040-make命令与传参
一、 make 命令
这部分其实没啥用,不可能记得这么多的,用到的时候可以 man make 这样, linux 就会很贴心的帮我们列出关于 make 的所有命令啦。这部分主要是来自于《make 的运行 — 跟我一起写Makefile 1.0 文档》。
- -b 、 -m
这两个参数的作用是忽略和其它版本 make 的兼容性。
- -B 、 --always-make
认为所有的目标都需要更新(重编译)。
- -C <dir> 、 --directory=<dir>
在读取 Makefile 之前,进入到目录 <dir> ,然后执行 make 。如果有多个 -C 参数, make 的解释是后面的路径以前面的作为相对路径,并以最后的目录作为被指定目录。例如,
make –C ~/a/b –C test
# 等价于
make –C ~/a/b/test- --debug[=<options>]
输出 make 的调试信息。如果没有参数,那就是输出最简单 的调试信息,默认是 options=b
| a | 也就是 all,输出所有的调试信息。(会非常的多) |
| b | 也就是 basic,只输出简单的调试信息。即输出不需要重编译的目标。 |
| v | 也就是 verbose,在 b 选项的级别之上。输出的信息包括哪个 makefile 被解析,不需 要被重编译的依赖文件(或是依赖目标)等。 |
| i | 也就是 implicit,输出所以的隐含规则。 |
| j | 也就是 jobs,输出执行规则中命令的详细信息,如命令的 PID、返回码等。 |
| m | 也就是 makefile,输出 make 读取 makefile,更新 makefile,执行 makefile 的信息。 |
- -i 、 --ignore-errors
在执行时忽略所有规则命令执行的错误。
- -I <dir> 、 --include-dir=<dir>
指定一个被包含 Makefile 的搜索目标。可以使用多个 -I 参数来指定多个目录。
- -j [<jobsnum>] 、 --jobs[=<jobsnum>]
指同时运行命令的个数。如果没有这个参数, make 运行命令时能运行多少就运行多少。如果有多个 -j 参数,那么仅最后一个 -j 的 jobsnum 才是有效的。(注意这个参数在 MS-DOS 中是无效的)
- -k 、 --keep-going
出错也不停止运行。如果生成一个目标失败了,那么依赖于其上的目标就不会被执行了。
- -n 、 --just-print 、 --dry-run 、 --recon
仅输出执行过程中的命令序列,但并不执行。
- -o <file> 、 --old-file=<file> 、 --assume-old=<file>
指定 <file> 文件不需要重建,即使是它的依赖已经过期;同时不重建此依赖文件的任何目标。注意:此参数不会通过变量 MAKEFLAGS 传递给子目录进程。
- -p 、 --print-data-base
命令执行之前,打印出 make 读取的 Makefile 的所有数据,同时打印出 make 的版本信息。这个参数会让一个简单的 Makefile 都会输出一堆信息。
如果只是想输出信息而不想执行 Makefile ,我们可以使用 make -qp 命令。
如果想查看执行 Makefile 前的预设变量和规则,可以使用 make –p –f /dev/null 。这个参数输出的信息会包含着你的 Makefile 文件的文件名和行号,所以,用这个参数来调试 Makefile 会是很有用的,特别是当环境变量很复杂的时候。
- -r 、 --no-builtin-rules
禁止 make 使用任何隐含规则。
- -R 、 --no-builtin-variabes
禁止 make 使用任何作用于变量上的隐含规则。
- -s 、 --silent 、 --quiet
在命令运行时不输出命令(默认状态下, make 会打印所有执行的命令)。
- -t 、 --touch
相当于 UNIX 的 touch 命令,只是把目标的修改日期变成最新的,也就是阻止生成目标的命令运行,防止 make 对所有过时目标文件的重建。
- --warn-undefined-variables
只要 make 发现有未定义的变量,那么就输出警告信息。
二、 make 传参
1. 传参格式
我们在输入 make 命令的时候是可以给相应的 Makefile 传入参数的,格式一般为:
make name1=value1 name2=value2 ...2. 使用实例
我们在 Makefile 文件中添加以下内容:
main:
@echo "ARCH=$(ARCH)"
@echo "V=$(V)"
@echo "name=$(name)"然后我们在终端执行:
make ARCH=arm name=sumu然后我们就会在终端看到有如下信息输出:
ARCH=arm
V=
name=sumu