GNU make 控制函数与 Makefile 指南
需积分: 44 79 浏览量
更新于2024-08-10
收藏 2.1MB PDF 举报
"make的控制函数-mapgis10教程"
在软件开发中,`make` 是一个用于自动化构建项目的工具,通常用于编译源代码。它根据 Makefile 文件中的规则来决定哪些目标文件需要重新编译。`make` 提供了一些控制函数,允许用户自定义 make 运行时的行为。在本教程中,我们将关注 `make` 的两个控制函数,特别是 `$(error)` 函数。
8.11.1 `$(error TEXT...)`
`$(error TEXT...)` 是一个内建的 `make` 函数,它的主要作用是在运行过程中向用户显示错误信息并终止 make 进程。这个函数的执行时机是函数被展开时,即在命令被执行或递归变量定义中。这意味着,如果 `error` 函数出现在 Makefile 的规则命令中,只有在执行到含有该函数的命令时,才会触发错误提示并停止 `make` 的执行。这有助于在错误发生时立即停止整个构建过程,防止进一步的无效操作。
例如,如果你在 Makefile 中设置了一个条件,当满足特定条件时,使用 `$(error)` 来告诉用户发生了什么问题,如:
```make
ifeq ($(CC), not_a_compiler)
$(error Invalid compiler "$(CC)" specified)
endif
```
在这个例子中,如果指定了非编译器的变量 `CC`,`make` 会显示一条错误信息并停止。
Makefile 的编写是构建流程自动化的核心部分,其主要包括规则、变量定义、依赖关系等。在 GNUmake 中,Makefile 可以非常灵活,支持条件语句、函数、通配符、搜索目录等多种特性。
2.1 Makefile简介
Makefile 是一个文本文件,其中包含了规则,定义了如何从源文件生成目标文件。每个规则通常包括目标、依赖项和命令。例如:
```make
target : dependency1 dependency2
command1
command2
```
这里,`target` 是要生成的文件,`dependency1` 和 `dependency2` 是生成 `target` 所需的文件,`command1` 和 `command2` 是当目标文件比依赖文件旧或者不存在时需要执行的命令。
2.6 自动推导规则
`make` 自动提供了一些隐含规则,比如它知道如何从 `.c` 文件生成 `.o` 文件,然后用链接器生成可执行文件。通过自动推导,可以简化 Makefile 的编写。
3.4 包含其他 Makefile 文件
通过 `include` 命令,可以在主 Makefile 中包含其他 Makefile,这样可以将项目的不同部分分隔管理,保持代码整洁。
4.4.1 通配符使用举例
在 Makefile 中,可以使用通配符 `*` 来匹配多个文件,如 `*.c` 匹配所有 `.c` 结尾的文件。然而,通配符在某些情况下可能不完全适用,需要配合 `wildcard` 函数来获取当前目录下匹配通配符的实际文件列表。
4.5 目录搜寻
`make` 提供了 `VPATH` 变量和 `vpath` 关键字,用于指定除了当前目录外的其他搜索路径,以便找到依赖文件。
熟练掌握 `make` 和 Makefile 的编写是软件开发过程中的重要技能,能有效提高构建效率。`$(error)` 函数作为一个控制机制,是确保构建过程正确无误的关键工具之一。通过学习和实践,你可以创建出高效且易于维护的 Makefile,从而优化你的开发流程。
2011-10-20 上传
2020-02-26 上传
2012-09-25 上传
点击了解资源详情
点击了解资源详情
点击了解资源详情
点击了解资源详情
点击了解资源详情
点击了解资源详情
史东来
- 粉丝: 42
- 资源: 4017
最新资源
- AA4MM开源软件:多建模与模拟耦合工具介绍
- Swagger实时生成器的探索与应用
- Swagger UI:Trunkit API 文档生成与交互指南
- 粉红色留言表单网页模板,简洁美观的HTML模板下载
- OWIN中间件集成BioID OAuth 2.0客户端指南
- 响应式黑色博客CSS模板及前端源码介绍
- Eclipse下使用AVR Dragon调试Arduino Uno ATmega328P项目
- UrlPerf-开源:简明性能测试器
- ConEmuPack 190623:Windows下的Linux Terminator式分屏工具
- 安卓系统工具:易语言开发的卸载预装软件工具更新
- Node.js 示例库:概念证明、测试与演示
- Wi-Fi红外发射器:NodeMCU版Alexa控制与实时反馈
- 易语言实现高效大文件字符串替换方法
- MATLAB光学仿真分析:波的干涉现象深入研究
- stdError中间件:简化服务器错误处理的工具
- Ruby环境下的Dynamiq客户端使用指南