LV02-05-Makefile-03-make命令与传参
本文主要是makefile——make命令与传参相关笔记,若笔记中有错误或者不合适的地方,欢迎批评指正😃。
点击查看使用工具及版本
Windows | windows11 |
Ubuntu | Ubuntu16.04的64位版本 |
VMware® Workstation 16 Pro | 16.2.3 build-19376536 |
SecureCRT | Version 8.7.2 (x64 build 2214) - 正式版-2020年5月14日 |
开发板 | 正点原子 i.MX6ULL Linux阿尔法开发板 |
uboot | NXP官方提供的uboot,NXP提供的版本为uboot-imx-rel_imx_4.1.15_2.1.0_ga(使用的uboot版本为U-Boot 2016.03) |
linux内核 | linux-4.15(NXP官方提供) |
STM32开发板 | 正点原子战舰V3(STM32F103ZET6) |
点击查看本文参考资料
参考方向 | 参考原文 |
Makefile | 跟我一起写Makefile |
一、 make 命令
这部分其实没啥用,不可能记得这么多的,用到的时候可以 man make 这样, linux 就会很贴心的帮我们列出关于 make 的所有命令啦。这部分主要是来自于《跟我一起写 Makefile》。
- -b 、 -m
这两个参数的作用是忽略和其它版本 make 的兼容性。
- -B 、 –always-make
认为所有的目标都需要更新(重编译)。
- -C <dir> 、 –directory=<dir>
在读取 Makefile 之前,进入到目录 <dir> ,然后执行 make 。如果有多个 -C 参数, make 的解释是后面的路径以前面的作为相对路径,并以最后的目录作为被指定目录。例如,
1 | make –C ~/a/b –C test |
- —debug[=<options>]
输出 make 的调试信息。如果没有参数,那就是输出最简单 的调试信息,默认是 options=b
点击查看 options
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 传入参数的,格式一般为:
1 | make name1=value1 name2=value2 ... |
2.使用实例
我们在 Makefile 文件中添加以下内容:
1 | main: |
然后我们在终端执行:
1 | make ARCH=arm name=qidaink |
然后我们就会在终端看到有如下信息输出:
1 | ARCH=arm |