GNU makefile中文教程详解
需积分: 10 173 浏览量
更新于2024-07-24
1
收藏 1.91MB PDF 举报
"GNU+makefile中文手册,ver-3.8,由徐海兵翻译整理,涵盖了关于GNU make的全面介绍,包括Makefile的基本概念、规则、变量使用、自动推导规则、目录搜索等内容。"
GNU Makefile是构建自动化工具,它允许程序员通过编写Makefile来自动化编译、链接等构建过程。手册详细介绍了以下知识点:
1. **概述**:
- Makefile是用于管理项目构建的文件,包含了构建过程中各种目标文件的依赖关系以及构建这些目标的命令。
- GNU make是流行的Make工具之一,支持更复杂的Makefile语法和功能。
2. **准备知识**:
- 在使用GNU make之前,需要了解基本的shell命令和编译原理。
3. **GNU make介绍**:
- **Makefile简介**:Makefile包含目标(如可执行文件)、依赖项(如源代码文件)和构建目标所需的命令。
- **规则介绍**:规则定义了目标和依赖,以及如何从依赖构建目标的命令。
- **简单示例**:通常包括目标、依赖和命令,如`target: dependency1 dependency2; command`。
- **make如何工作**:make根据Makefile中的规则检查目标是否需要更新,并执行相应的命令。
- **指定变量**:使用变量可以简化Makefile,减少重复,如`CC=gcc`指定C编译器。
- **自动推导规则**:GNU make可以自动推导某些类型的依赖关系,例如从.c文件生成.o文件的编译过程。
- **另类风格的makefile**:Makefile的写法可以有多种,但应保持可读性和一致性。
4. **Makefile总述**:
- **Makefile内容**:包括目标、依赖、命令、变量等。
- **命名**:Makefile可以命名为任意名字,但通常使用`Makefile`或`makefile`。
- **包含其他makefile**:使用`include`指令引入其他Makefile文件。
- **特殊变量**:如`MAKEFILES`和`MAKEFILE_LIST`记录了make使用的Makefile列表。
- **文件重建**:make可以自动生成Makefile的依赖关系,以便于追踪文件更改。
5. **Makefile的规则**:
- **规则语法**:规则定义了目标、依赖和命令的结构。
- **依赖类型**:可以是文件依赖,也可以是其他规则。
- **通配符**:`*`用于匹配任何字符序列,但可能导致不期望的行为。
- **函数wildcard**:用于获取当前目录下匹配通配符的文件列表。
- **目录搜索**:通过`VPATH`和`vpath`关键字控制源文件的搜索路径。
- **伪目标**:如`.PHONY`,确保目标总是被重新构建。
- **强制目标**:无命令或依赖的规则,用于指示make进行特定操作。
- **空目标文件**:用于标记构建过程中的中间状态。
- **特殊目标**:如`.SILENT`、`.SECONDARY`等,控制make的行为。
- **多目标**:一个规则可以有多个目标,共享相同的依赖和命令。
- **静态模式规则**:更灵活的规则形式,允许指定模式依赖和命令。
手册还深入探讨了静态模式规则的语法和用法,以及它们与隐含规则的关系,提供了一整套构建自动化的方法论,对于理解和编写高效Makefile非常有价值。
点击了解资源详情
点击了解资源详情
点击了解资源详情
2013-03-31 上传
2016-11-30 上传
2018-09-18 上传
2019-11-07 上传
2023-02-13 上传
_剪烛西窗_
- 粉丝: 13
- 资源: 6
最新资源
- 深入浅出:自定义 Grunt 任务的实践指南
- 网络物理突变工具的多点路径规划实现与分析
- multifeed: 实现多作者间的超核心共享与同步技术
- C++商品交易系统实习项目详细要求
- macOS系统Python模块whl包安装教程
- 掌握fullstackJS:构建React框架与快速开发应用
- React-Purify: 实现React组件纯净方法的工具介绍
- deck.js:构建现代HTML演示的JavaScript库
- nunn:现代C++17实现的机器学习库开源项目
- Python安装包 Acquisition-4.12-cp35-cp35m-win_amd64.whl.zip 使用说明
- Amaranthus-tuberculatus基因组分析脚本集
- Ubuntu 12.04下Realtek RTL8821AE驱动的向后移植指南
- 掌握Jest环境下的最新jsdom功能
- CAGI Toolkit:开源Asterisk PBX的AGI应用开发
- MyDropDemo: 体验QGraphicsView的拖放功能
- 远程FPGA平台上的Quartus II17.1 LCD色块闪烁现象解析