理解与编写makefile规则

3星 · 超过75%的资源 需积分: 9 2 下载量 62 浏览量 更新于2024-09-15 收藏 85KB DOC 举报
"这篇文档是方正奥德计算机系统有限公司在2001年发布的关于`make工具及makefile规则`的培训教材,主要讲解了如何编写makefile,包括目标行、命令行、宏定义行和make伪指令的使用。文档还提到了后缀规则以及特殊目标和宏的概念,旨在帮助开发者理解和掌握构建自动化工具make的使用方法。" 在软件开发过程中,`makefile`是一个关键的脚本文件,用于指导`make`工具自动编译和链接项目中的源代码。以下是对makefile中各种行类型的详细说明: 1. **目标行** (Target Line): 目标行定义了需要构建的文件以及它们依赖的其他文件。例如,`example: depfile deptarget` 表示`example`文件的构建依赖于`depfile`和`deptarget`。如果依赖文件被修改,`example`将被重新构建。目标行可以包含多个目标,如`example1 example2 example3: deptarget1 deptarget2 depfile`,这意味着多个目标共享相同的依赖和构建规则。 2. **命令行** (Command Line): 命令行紧跟在目标行之后,且必须以制表符(Tab)开头,不能用空格替代。例如,`cc -c example.c` 是一个命令,表示当`example.c`改变时,应该执行这个命令来创建`example.o`对象文件。每个命令通常在单独一行,如果一行写不下,可以使用反斜杠(\)续行。 3. **宏定义行** (Macro Definition Line): 宏定义行允许我们定义变量,这些变量可以在makefile中多次使用,简化和标准化规则。例如,`CC = gcc` 定义了一个宏`CC`,其值为`gcc`。在命令中可以使用`$(CC)`来引用这个宏,如`$(CC) -c example.c`。 4. **make伪指令** (Make Pseudo-Instructions): - `include` 伪指令用于包含其他makefile文件,这使得makefile能够模块化,方便管理和维护大型项目。 - `#` 符号用于注释,注释行不会被执行,只是提供信息。 5. **后缀规则** (Suffix Rules): 后缀规则分为双后缀规则和单后缀规则,用于自动化处理具有特定后缀的文件。例如,双后缀规则`%.o : %.c` 意味着任何`.o`文件都依赖于相应的`.c`文件,而单后缀规则如`clean:`则表示一个没有依赖项的目标,通常用于清理构建过程产生的临时或中间文件。 6. **特殊目标** (Special Targets): 特殊目标如`clean`、`all`、`install`等,是预定义的,它们具有特殊含义,比如`clean`通常用于删除编译生成的文件,`all`是默认目标,用于构建整个项目。 7. **宏** (Macros): 除了预定义的宏,如`$@`代表当前目标,`$<`代表第一个依赖,开发者还可以自定义宏来存储常量、路径或其他需要重复使用的字符串。 理解并熟练运用makefile能够极大地提高软件构建的效率,减少手动操作的错误,是每个Unix/Linux环境下开发者的必备技能。通过合理地组织makefile,可以构建复杂的构建流程,支持大型项目或库的编译。