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
2
3
make –C ~/a/b –C test
# 等价于
make –C ~/a/b/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
2
3
4
main:
@echo "ARCH=$(ARCH)"
@echo "V=$(V)"
@echo "name=$(name)"

然后我们在终端执行:

1
make ARCH=arm name=qidaink

然后我们就会在终端看到有如下信息输出:

1
2
3
ARCH=arm
V=
name=qidaink