Chinaunix首页 | 论坛 | 博客
  • 博客访问: 411492
  • 博文数量: 96
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 415
  • 用 户 组: 普通用户
  • 注册时间: 2015-05-22 09:08
个人简介

最近的研究方向:Nginx

文章分类
文章存档

2017年(2)

2016年(59)

2015年(35)

我的朋友

分类: 嵌入式

2015-12-07 19:37:04

最近在看u-boot中的Makfile时,看到了这样的代码,

点击(此处)折叠或打开

  1. %_config:: unconfig
  2. @$(MKCONFIG) -A $(@:_config=)
看到这后面的双冒号时不了解它的作用是干嘛的,所以老办法,去找百度,找了很久,最后在一段博客里面找到了解释。在此先感谢博主pursuitxh,原文连接:http://blog.chinaunix.net/uid-18921523-id-165029.html

  1. 它的解释:
  2. 这里可以看到%_config目标后面是双冒号,而我们平常看的只有一个冒号,这个就是makefile 的双冒号规则了,而平常我们见的单冒号就是普通规则。Makefile 中规定:一个目标可以出现在多个规则中。但是这些规则必须是同一类型的规则,要么都是普通规则,要么都是双冒号规则。而不允许一个目标同时出现在两种不同类型的规则中。双冒号规则和普通规则的处理的不同点表现在以下几个方面:
  3. 1. 双冒号规则中,当依赖文件比目标更新时。规则将会被执行。对于一个没有依赖而只有命令行的双冒号规则,当引用此目标时,规则的命令将会被无条件执行。而普通规则,当规则的目标文件存在时,此规则的命令永远不会被执行(目标文件永远是最新的)。
  4. 2. 当同一个文件作为多个双冒号规则的目标时。这些不同的规则会被独立的处理,而不是像普通规则那样合并所有的依赖到一个目标文件。这就意味着对这些规则的处理就像多个不同的普通规则一样。就是说多个双冒号规则中的每一个的依赖文件被改变之后,make只执行此规则定义的命令,而其它的以这个文件作为目标的双冒号规则将不会被执行。


阅读(2161) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~