GNU make隐含规则详解

需积分: 9 76 下载量 159 浏览量 更新于2024-08-08 收藏 1.29MB PDF 举报
"make的隐含规则一览-boost.asio c++网络编程(中文版)pdf" 在编程领域,`make` 是一个强大的自动化构建工具,它根据Makefile中的规则来编译和链接程序。`make` 的隐含规则是预先定义的一系列规则,用于简化常见的构建任务,例如编译C或C++源文件。这些规则不需要在Makefile中显式声明,除非用户通过命令行选项 `-r` 或 `-R` 来禁用它们。 9.2章节中列举了一些常见的`make`隐含规则,它们通常涉及到以下方面: 1. 编译源文件:`make`会自动识别`.c`、`.cc`、`.C`、`.p`等源文件,并使用相应的编译器(如`gcc`或`g++`)将它们转换成`.o`目标文件。例如,`cc -c foo.c` 会生成 `foo.o`。 2. 链接目标文件:当`make`发现多个`.o`文件和一个最终的目标文件(如`a.out`或`my_program`)时,它会默认使用链接器将它们合并成可执行文件。 3. 预处理:对于`.cpp`等C++源文件,`make`会先进行预处理,生成`.i`文件,然后编译成`.o`。 4. 汇编:对于`.s`或`.S`(大写的S)这样的汇编语言源文件,`make`会调用汇编器生成`.o`文件。 5. 后缀规则:这些隐含规则实际上基于`make`的后缀列表,比如`.c`到`.o`的转换。用户可以通过`.SUFFIXES`变量修改这个列表,或者清空它,这会影响到哪些隐含规则会被应用。 6. 清理操作:通常,Makefile会包含清理目标,如`.PHONY: clean`,`clean:`后面跟着删除临时和编译产生的文件的命令。 7. 库文件处理:`make`也知道如何处理库文件(如`.a`档案库)以及动态链接库(如`.so`文件)。 8. 依赖文件的更新:如果源文件被修改,`make`会自动重新编译对应的依赖目标。 9. 其他规则:还有一些不常见的隐含规则,比如处理Yacc(`y`)和Lex(`l`)生成的文件,或者处理TeX文档的规则。 `make`的隐含规则极大地简化了Makefile的编写,使得开发者不需要为每个编译步骤都写具体的命令。然而,当项目需求变得复杂时,可能需要自定义规则以覆盖默认行为。在编写Makefile时,了解并利用这些隐含规则可以提高效率,但也需要注意它们可能带来的潜在问题,例如当默认规则不符合项目特定的编译需求时。因此,适时地覆盖或扩展隐含规则是非常必要的。 在`GNUmake中文手册`中,详细介绍了`make`的各个方面,包括Makefile的基本结构、变量、规则、条件语句、目录搜索等,这对于理解和编写Makefile至关重要。通过学习这些内容,开发者能够更好地管理项目构建过程,确保代码正确、高效地编译和链接。