GNU make 缺省规则与后缀规则详解

需积分: 44 76 下载量 2 浏览量 更新于2024-08-10 收藏 2.1MB PDF 举报
"Makefile教程-理解后缀规则与缺省规则" 在Makefile编写中,后缀规则和缺省规则是两种重要的构建规则,用于控制编译和构建过程。它们在旧版本的Makefile中尤为常见,但在现代版本中,模式规则已经逐渐替代了后缀规则,以提供更清晰的规则定义。 **10.6 缺省规则** 缺省规则是在Makefile中定义的一种默认行为,当make程序找不到特定文件的重建规则时,会使用这个规则。这通常发生在目标文件没有明确的构建指令,或者没有合适的隐含规则适用的情况下。有两种方式定义缺省规则: - **万用规则(%::)**:使用`%::`,这意味着对所有不存在的文件,如`.c`文件,执行`touch $@`命令,创建一个空的源文件。这种方式适用于调试Makefile,关注的是规则的正确性而非源文件内容。 - **伪目标`.DEFAULT`**:通过`.DEFAULT`伪目标,可以指定当没有其他命令时执行的默认操作。例如,` .DEFAULT : touch $@`,同样会创建空文件。如果不指定命令,那么`.DEFAULT`伪目标可以定义为空命令。 **10.7 后缀规则** 后缀规则是Makefile的遗留特性,用于定义文件转换的隐含规则,现在已被模式规则所取代。后缀规则有两种形式: - **双后缀规则**:定义一对后缀,如`.c`到`.o`的转换,匹配所有具有目标后缀的文件,并根据规则将依赖文件的后缀改变。例如,`%.o: %.c`表示将`.c`文件编译成`.o`文件。 - **单后缀规则**:仅定义一个后缀,用于转换所有具有该后缀的文件。这种规则在某些特定场景下仍然有用,但通常不推荐使用,因为模式规则更加灵活和清晰。 **模式规则与后缀规则的对比** 模式规则(如`%.o: %.c`)比后缀规则更强大,因为它们可以处理多种类型的依赖关系,而不仅仅是基于文件后缀。模式规则可以使用模式匹配,不仅限于文件后缀,还能处理文件名中的其他部分,使得规则更通用。 理解并适当运用Makefile中的后缀规则和缺省规则对于编写高效且易于维护的构建脚本至关重要。虽然现代的Makefile倾向于使用模式规则,但对后缀规则的理解仍然是兼容旧Makefile和理解Makefile工作原理的基础。