多目标规则

多目标规则,可以简单的理解为是一种将多条具有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文件,则会出现问题。

最新文章

  1. Laravel框架数据库CURD操作、连贯操作使用方法
  2. centos7 ssh 设置key认证
  3. TCP连接——爱的传声筒
  4. Python语言快速入门
  5. 【面试题】Round A China New Grad Test 2014总结
  6. 关于java设计模式与极品飞车游戏的思考
  7. android截屏:保存一个view的内容为图片并存放到SD卡
  8. python库tkinter、pygame中几点需要注意的问题
  9. Eclipse使用git 上传代码至github
  10. 平安某金所奇葩的面经-关于幂等和ROA设计的反思
  11. Java IO流之转换流
  12. 种下一棵树:有旋Treap
  13. Ubuntu虚拟机可以上网,可以ping网络,但是无法update和install,报连接不上服务器的错误解决方案:
  14. Java核心技术第五章——2.Object类
  15. __x__(26)0907第四天__文档流_网页最底层
  16. Matlab调用C程序
  17. [JLOI2011]不重复数字
  18. setAttribute的浏览器兼容性(转)
  19. Autofac创建实例的方法总结[转]
  20. TCP实现一个简易的聊天室 (Unity&amp;&amp;C#完成)

热门文章

  1. 关于银企直连中银行通信类 配置篇 EPIC_PROC
  2. 记一下python的method resolution order(MRO)机制
  3. ASP.NET CORE 中使用AutoMapper进行对象映射
  4. SpringBoot+Security+MyBatis+ES+MQ+Redis+Docker+Vue的电商系统
  5. 【Idea】idea中spring框架配置文件,无法自动提示spring配置
  6. 转:win10完美去除快捷方式小箭头
  7. Httpd服务入门知识-Httpd服务常见配置案例之显示服务器版本信息
  8. zabbix--监控MySQL主从状态
  9. linux中的halt和shutdown
  10. django项目后台权限管理功能。