computer_knowledge_notes/Software/编译工具/make.md

1.7 KiB
Raw Blame History

原理

从根本上说,make工具建立的是文件之间相互依赖关系,即一些指定文件的更新触发某种动作。所以,处理文件之间这种依赖关系的问题,都可以用make命令。但make命令主要还是用在编译大型程序。

要使用make必须要有makefile文件。make是干活的而makefile告诉make如何干活。

make命令的执行过程如下:

  1. 读入makefile。
  2. 读入被include的其它makefile。
  3. 初始化文件中的变量。
  4. 推导隐晦规则,并分析所有的规则。
  5. 创建文件之间的依赖关系链。
  6. 依据依赖关系判断需要重新生成的文件。
  7. 执行生成命令。

语法

make [OPTION] ... [TARGET] ...

OPTIONS

-b, -m
-B, --always-make
-C dir, --directory=dir	# 更改目录为dir
-d
--debug[=FLAGS]
-e, --environment-overrides
-f file, --file=file, --makefile=FILE	# 使用file作为makefile
-i, --ignore-errors
-I dir, --include-dir=dir
-j [jobs], --jobs[=jobs]
--jobserver-fds [R,W]
-k, --keep-going
-l [load], --load-average[=load]
-L, --check-symlink-times
-n, --just-print, --dry-run, --recon	# 只打印命令而不执行它们
-o file
-O [type]
-p, --print-data-base
-q, --question	# 不运行任何命令也不打印任何东西只返回一个退出的状态。如果编译目标已经更新则返回0否则返回其它数字。
-r
-R
-s
-S
-t, --touch	# 更新文件的日期从而不执行它所依赖的命令。这实际上就是假装命令已经执行过了以便make将来调用的时候欺骗它。
--trace
-v
-w
--no-print-directory
-W
--warn-undefined-variables

示例

make SHELL="/bin/bash -x"	# 要了解详细的编译过程,但"make -n"又失效的时候,可试试这条命令