一起学Makefile(五)
多目标规则
多目标规则,可以简单的理解为是一种将多条具有1)相同依赖和2)相同生成命令的规则,合并成一条规则的语法,其基本格式为:
targets...: prerequisites...
commands
...
假设我们有以下makefile:
利用多目标规则,可以将makefile改写成makefile文件
这里我们可以观察到,虽然多目标规则中要求命令必须相同,但是配合上自动化变量的使用,就是可以针对不同的目标有不同的执行结果。
多规则目标
Makefile中,一个目标可以同时出现在多条规则中。
这种情况下,此目标文件的所有依赖文件将会被合并成此目标一个依赖文件列表,其中任何一个依赖文件比目标更新(比较目标文件和依赖文件的时间戳)时,make将会执行特定的命令来重建这个目标。对于一个多规则的目标,重建此目标的命令只能出现在一个规则中(可以是多条命令)。
如果多个规则同时给出重建此目标的命令,make将使用最后一个规则的命令,同时提示错误信息。
静态模式规则
可以理解为一种特殊的多目标规则,它仅要求多条规则具有相同的命令,而依赖可以不完全一样。
静态模式规则,其基本语法:
TARGETS ...: TARGET-PATTERN: PREREQ-PATTERNS ...
COMMANDS
...
其大致意思就是,用TARGET-PATTERN: PREREQ-PATTERNS ...描述的模式,从TARGETS ...取值来形成一条条规则,所有规则的命令都用COMMANDS。
TARGETS ...代表具有相同模式的规则的目标列表,在我们的项目中就是main.o和complicated.o,我们可以直接引用我们先前定义的objects变量。
TARGET-PATTERN: PREREQ-PATTERNS ...部分定义了,如何为目标列表中的目标,生成依赖;TARGET-PATTERN称为目标模式,PREREQ-PATTERNS称为依赖模式;目标模式和依赖模式中,一般需要包含模式字符%
目标模式的作用就是从目标列表中的目标匹配过滤出需要的值,目标模式中的字符%表示在匹配过滤的过程中不做过滤的部分,目标模式中的其他字符表示要与目标列表中的目标精确匹配,例如,目标模式%.o, 表示从目标列表的目标中匹配所有已.o结尾的目标,然后过滤掉匹配目标的.o部分, 因此目标main.o经过目标模式%.o匹配过滤后,得到的输出就是main。
依赖模式的作用就是表示要如何生成依赖文件。具体的生成过程,就是使用目标模式过滤出来的值,替换依赖模式字符%所表示的位置。因此,如果依赖模式为%.c, 则使用上述例子过滤出来的main来替换字符%, 最终得到依赖文件main.c。
伪目标
当我们将一个目标定义成伪目标时,意味着它不代表一个真正的文件名,在执行make时可以指定这个目标来执行其所在规则定义的命令。
定义一个伪目标的基本语法:
.PHONY: <伪目标>
对于make clean操作,如果不设置为伪目标,则如果存在一个clean文件,则会出现问题。
最新文章
- Laravel框架数据库CURD操作、连贯操作使用方法
- centos7 ssh 设置key认证
- TCP连接——爱的传声筒
- Python语言快速入门
- 【面试题】Round A China New Grad Test 2014总结
- 关于java设计模式与极品飞车游戏的思考
- android截屏:保存一个view的内容为图片并存放到SD卡
- python库tkinter、pygame中几点需要注意的问题
- Eclipse使用git 上传代码至github
- 平安某金所奇葩的面经-关于幂等和ROA设计的反思
- Java IO流之转换流
- 种下一棵树:有旋Treap
- Ubuntu虚拟机可以上网,可以ping网络,但是无法update和install,报连接不上服务器的错误解决方案:
- Java核心技术第五章——2.Object类
- __x__(26)0907第四天__文档流_网页最底层
- Matlab调用C程序
- [JLOI2011]不重复数字
- setAttribute的浏览器兼容性(转)
- Autofac创建实例的方法总结[转]
- TCP实现一个简易的聊天室 (Unity&;&;C#完成)
热门文章
- 关于银企直连中银行通信类 配置篇 EPIC_PROC
- 记一下python的method resolution order(MRO)机制
- ASP.NET CORE 中使用AutoMapper进行对象映射
- SpringBoot+Security+MyBatis+ES+MQ+Redis+Docker+Vue的电商系统
- 【Idea】idea中spring框架配置文件,无法自动提示spring配置
- 转:win10完美去除快捷方式小箭头
- Httpd服务入门知识-Httpd服务常见配置案例之显示服务器版本信息
- zabbix--监控MySQL主从状态
- linux中的halt和shutdown
- django项目后台权限管理功能。