理解GNU make的后缀规则:从老式到现代

需积分: 5 31 下载量 140 浏览量 更新于2024-08-09 收藏 391KB PDF 举报
"老式风格的“后缀规则”在VSCode配置C/C++编译环境的教程中扮演了重要角色。后缀规则是早期Makefile定义隐含规则的方法,尽管现在已被模式规则所取代,但在与旧版Makefile兼容时仍然重要。后缀规则分为双后缀和单后缀两种形式。双后缀规则如“.c.o”表示目标文件(.o)由源文件(.c)生成,而单后缀规则如“.c”则表明源文件的后缀。后缀必须是make识别的,比如“.c”和“.o”。 编写Makefile时,后缀规则不能包含依赖文件,否则就不再是后缀规则。例如,`.c.o: foo.h` 表示`.c.o`依赖于`foo.h`,而非我们期望的模式规则`%.o: %.c foo.h`。如果后缀规则没有命令,它将不执行任何操作,也不会覆盖内置的隐含规则。 通过`.SUFFIXES`伪目标,可以添加、删除或修改后缀列表。默认的后缀列表可以通过`-r`或`-no-builtin-rules`选项清空,或者通过设置`SUFFIXES`变量来定制。然而,不应直接修改`SUFFIXE`变量的值。 Makefile的书写涉及许多方面,包括规则的定义、变量的使用、命令的书写以及条件判断和函数的应用。规则的语法允许使用通配符和模式,伪目标如`clean`用于清除目标文件。变量可以存储值并在Makefile中复用,条件判断则提供了根据不同情况执行不同命令的功能。此外,Makefile还支持各种函数,如字符串处理和文件名操作,这些增强了Makefile的灵活性和实用性。 本教程的作者是陈皓,发布于2014年,旨在帮助读者理解并编写有效的Makefile,以提高C/C++项目的构建效率。"