"GNU MAKE 中文手册提供了关于编写和理解Makefile的详细指南,涵盖了从基本概念到高级特性的各种内容,适用于Linux、Windows以及嵌入式开发环境。手册包括了makefile的运行机制、规则定义、自动依赖、源码编译等方面的知识,帮助开发者高效地管理项目构建过程。" 在GNU Make中,`Makefile`是控制程序构建的核心文件,它定义了一系列的规则来指示编译器如何构建和链接目标文件。`Makefile`的基本结构包括规则,规则由目标、依赖和命令组成。目标通常是需要生成的文件,依赖是生成目标所需的文件,而命令则是当目标需要更新时执行的指令。 1. **概述**: `Makefile`用于自动化源代码的编译和链接过程,通过检查目标文件和依赖文件的修改时间,决定哪些文件需要重新编译。 2. **准备知识**: 在开始编写Makefile之前,需要了解基本的shell命令和编译过程。 3. **GNUmake介绍**: - **Makefile简介**:Makefile包含了一系列规则,每个规则都描述了一个或多个目标及其依赖。 - **规则介绍**:规则格式通常为`target: dependency... command...`,表示当依赖文件改变时,执行命令来更新目标。 - **简单示例**:简单的Makefile可能包含一个规则来编译源文件。 - **make如何工作**:make会根据规则检查目标文件的更新状态,决定是否执行命令。 - **指定变量**:可以定义变量来存储重复使用的文本,简化Makefile。 - **自动推导规则**:make内置了一些隐含规则,可以自动推导出编译和链接的命令。 - **另类风格的makefile**:make支持不同的风格来编写规则,如不使用tab键等。 4. **Makefile总述**: - **内容**:Makefile可以包含目标、规则、变量定义、包含的其他Makefile等。 - **命名**:Makefile文件可以命名为`Makefile`或`makefile`,也可以通过`-f`选项指定。 - **包含其它makefile**:`include`指令可以包含其他Makefile文件。 - **特殊变量**:有一些预定义的特殊变量,如`MAKEFILES`、`MAKEFILE_LIST`等,它们在Makefile中具有特定作用。 - **文件重建**:有时需要在Makefile中添加规则来重建Makefile自身。 5. **Makefile的规则**: - **规则语法**:规则的语法有严格的规定,目标和依赖之间用冒号分隔,命令前必须有tab键。 - **依赖类型**:规则可以有多种类型的依赖,包括源文件、头文件等。 - **通配符**:使用`*`、`?`等通配符匹配多个文件名,但需要注意其可能导致的错误。 - **目录搜寻**:通过设置`VPATH`或使用`vpath`关键字可以指定额外的搜索路径。 - **伪目标**:如`.PHONY`,用于标记那些实际上并非文件的目标。 - **强制目标**:没有命令和依赖的规则,用于仅执行某些操作。 - **空目标文件**:用于确保某个命令被执行,即使目标已经存在。 - **特殊目标**:如`.SUFFIXES`、`.PRECIOUS`等,具有特定含义。 - **多目标**:一个规则可以定义多个目标,共享相同的依赖和命令。 - **多规则目标**:一个目标可以有多个规则,make会选择最新的规则。 6. **自动依赖**: make可以自动生成源文件的依赖关系,这样每次修改头文件后,相关的源文件都会自动重新编译。 通过深入理解和熟练运用这些知识点,开发者可以创建出高效且可维护的Makefile,简化项目的构建流程,提高开发效率。对于大型项目或跨平台开发,理解并掌握Makefile的编写至关重要。
![](https://csdnimg.cn/release/download_crawler_static/87355729/bg10.jpg)
![](https://csdnimg.cn/release/download_crawler_static/87355729/bg11.jpg)
![](https://csdnimg.cn/release/download_crawler_static/87355729/bg12.jpg)
![](https://csdnimg.cn/release/download_crawler_static/87355729/bg13.jpg)
![](https://csdnimg.cn/release/download_crawler_static/87355729/bg14.jpg)
剩余198页未读,继续阅读
![application/x-rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![application/msword](https://img-home.csdnimg.cn/images/20210720083327.png)
![application/x-rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/release/wenkucmsfe/public/img/green-success.6a4acb44.png)