"这篇文档是关于Linux 2.6环境下GNU makefile的书写指南,主要摘自GNUmake中文手册ver-3.81,由徐海兵翻译整理。"
在Linux系统中,`makefile`是用于自动化构建、编译和链接程序的重要工具。它通过一系列规则来指示`make`程序执行哪些任务以及如何执行。以下是关于`makefile`书写的一些关键知识点:
1. **概述**:
- `make`是一个自动化构建工具,用于根据目标文件的修改时间自动构建项目。
- `makefile`是`make`程序的配置文件,其中包含了构建过程的指令。
2. **准备知识**:
- 需要了解基本的shell命令和编程概念。
- 熟悉目标、依赖和命令的概念,这些是`makefile`的基本元素。
3. **GNUmake介绍**:
- **Makefile简介**:Makefile包含目标、依赖和命令,描述了如何从源文件生成目标文件。
- **规则介绍**:规则通常由目标、依赖和命令三部分组成,例如`target: dependency... command...`。
- **简单示例**:一个简单的`makefile`可能包括一个目标,该目标依赖于某个源文件,并且有对应的编译命令。
- **make如何工作**:`make`会检查目标与依赖的修改时间,如果目标比依赖旧,则执行相应的命令更新目标。
4. **指定变量**:
- 变量可以存储重复使用的值,如编译选项或路径,可以使用`VAR = value`或`VAR := value`语法定义。
- **自动推导规则**:`make`提供了一些自动推导规则,可以根据目标文件的扩展名自动推导编译命令。
5. **另类风格的makefile**:
- `make`支持不同的风格和约定,如使用Tab键而不是多个空格来分隔命令。
6. **清除工作目录过程文件**:
- `clean`规则常用于清理编译过程中产生的临时和目标文件。
7. **Makefile总述**:
- **内容**:Makefile可以包含目标、依赖、命令、变量定义和其他控制结构。
- **命名**:Makefile可以命名为`Makefile`或`makefile`,`make`会自动寻找。
- **包含其他makefile**:使用`include`指令可以包含其他文件中的规则和变量。
- **变量MAKEFILES**:这个变量包含了被`include`的所有文件路径。
- **解析makefile**:`make`会按照特定顺序解析和执行规则。
8. **Makefile的规则**:
- **规则语法**:规则定义了目标、依赖和命令,目标和依赖之间用冒号分隔,命令前加Tab键。
- **依赖的类型**:依赖可以是具体文件或伪目标。
- **通配符**:`*`用于匹配任意字符,`?`用于匹配单个未知字符。
- **目录搜索**:通过`VPATH`变量可以指定搜索源文件的额外目录。
- **静态模式规则**:静态模式规则允许更灵活地匹配多个目标。
这些知识点构成了编写高效、可维护的`makefile`的基础,使得开发者能够方便地管理复杂的构建过程。理解并熟练运用这些概念,可以使项目构建更加自动化和高效。