本文共 1886 字,大约阅读时间需要 6 分钟。
Make 是 Unix/Linux 环境下广泛使用的工具,用于通过定义文件的依赖关系,自动化编译和其他建造任务。它能够通过读取 Makefile 文件,找出需要更新的目标,并执行适当的编译或处理命令,从而节省时间和精力。以下从基础到进阶详细说明 Make 的使用方法和功能。
Make 命令执行后会返回三个可能的退出码:
这些退出码对于检查 Make 命令的执行结果非常有用。
Make默认情况下在当前目录下依次搜索 "GNUmakefile"、"makefile" 和 "Makefile"这三个文件。如果找到其中一个文件,就读取这个文件并执行。然而,可以通过提供 "-f" 或 "--file" 选项来指定特定的 Makefile。例如,若有 Makefile 名为 "hchen.mk",可以这样执行:
make -f hchen.mk
如果多次使用 "-f" 参数,则会将所有指定的 Makefile 连接一起传递给 Make。
Make 的默认目标是 Makefile 中第一个目标,其余目标通常是由这个目标依赖的。然而,可以通过在命令后直接指定目标来改变执行顺序。例如:
make clean
指定目标时,目标名称应避免包含冒号、等号或双减号(即不推荐使用含有这些字符的目标)。此外,隐含目标(基于文件扩展名或依赖关系推导的目标)也可以作为终极目标。
all
和 clean
是常见的伪目标。all
通常用于编译所有目标文件,而 clean
则用于清理。
通过使用以下参数,可以检查 Makefile 中的规则和命令而不执行:
这些参数在调试 Makefile 时非常有用。例如,可以通过组合 "--what-if=foo.c" 和 "-n" 查看目标 foo.o
更新时的规则。
GNU Make 3.80 其主要参数如下:
"--debug[=<级别>]": 输出调试信息,默认为简单调试。选项包括:
"-d": 等同于 "--debug=a"。
make all
make clean
make obj.o
make -n
通过树状结构的 Makefile,可以定义复杂的编译和依赖关系。例如,定义清理步骤:
all: $(CC) -c *.c $(LINKER) -o bin/myappclean: rm -f *.o bin/myapp
提示:确保目标文件名不含双减号或冒号。Make 将目标文件名中的 . 转换为相应的扩展名(如 .c -> .o)。
转载地址:http://fomgz.baihongyu.com/