理解makefile的重建与避免死循环

需积分: 12 12 下载量 100 浏览量 更新于2024-08-07 收藏 2.02MB PDF 举报
"这篇文档是关于`makefile`文件重建的详细解释,主要源自`GNUmake中文手册`,由徐海兵翻译整理。文档中详细阐述了`make`程序处理`makefile`的方式,以及如何避免不必要的`makefile`重建过程。" 在`makefile`的构建中,有时`Makefile`可能由其他文件如`RCS`或`SCCS`文件生成。当`make`读取`Makefile`时,它会检查是否需要根据规则更新这个文件。如果有明确或隐含的规则用于更新`Makefile`,`make`会先更新`Makefile`,然后再重新读取,确保使用的是最新版本。在读取所有`makefile`后,如果发现有更新,`make`会清空状态并再次读取,这个过程会持续直到所有`makefile`都是最新的。 在实际应用中,我们通常会明确指定`Makefile`,而不是让`make`自动重建它们。为了避免`make`在执行时尝试寻找重建`makefile`的隐含规则,可以设置一个空命令规则,以`Makefile`为目标。这样做可以防止`make`陷入无限循环,因为一个双冒号规则(没有依赖,只有命令行)更新`makefile`会导致`make`不断地重新读取和更新文件。 `make`在运行时,如果没有使用`-f`选项指定文件,它会尝试读取默认的`makefile`,如`GNUmakefile`、`makefile`或`Makefile`。如果默认的`makefile`不存在但可以通过隐含规则创建,`make`会自动生成并读取这个文件。 文档还涵盖了`make`的基本概念,如`Makefile`的结构、规则、变量、自动推导、包含其他`makefile`、条件语句等。规则部分详细讲解了规则的语法、依赖类型、通配符使用、目录搜索、伪目标、静态模式规则和双冒号规则等内容。 在编写`Makefile`时,理解这些概念和机制至关重要,因为它们决定了`make`如何构建和管理项目中的依赖关系,以及如何有效地编译和链接源代码。正确配置`Makefile`可以显著提高软件开发的效率。