makefile双冒号规则

转载 2012年03月22日 23:11:21


双冒号规则就是使用“::”代替普通规则的“:”得到的规则。当同一个文件作为多个规则的目标时,双冒号规则的处理和普通规则的处理过程完全不同(双冒号规则允许在多个规则中为同一个目标指定不同的重建目标的命令)。

首先需要明确的是:Makefile中,一个目标可以出现在多个规则中。但是这些规则必须是同一类型的规则,要么都是普通规则,要么都是双冒号规则。而不允许一个目标同时出现在两种不同类型的规则中。双冒号规则和普通规则的处理的不同点表现在以下几个方面:

1.        双冒号规则中,当依赖文件比目标更新时。规则将会被执行。对于一个没有依赖而只有命令行的双冒号规则,当引用此目标时,规则的命令将会被无条件执行。而普通规则,当规则的目标文件存在时,此规则的命令永远不会被执行(目标文件永远是最新的)。

2.        当同一个文件作为多个双冒号规则的目标时。这些不同的规则会被独立的处理,而不是像普通规则那样合并所有的依赖到一个目标文件。这就意味着对这些规则的处理就像多个不同的普通规则一样。就是说多个双冒号规则中的每一个的依赖文件被改变之后,make只执行此规则定义的命令,而其它的以这个文件作为目标的双冒号规则将不会被执行。

我们来看一个例子,在我们的Makefile中包含以下两个规则:

 

Newprog :: foo.c

       $(CC) $(CFLAGS) $< -o $@

Newprog :: bar.c

       $(CC) $(CFLAGS) $< -o $@

 

如果“foo.c”文件被修改,执行make以后将根据“foo.c”文件重建目标“Newprog”。而如果“bar.c”被修改那么“Newprog”将根据“bar.c”被重建。回想一下,如果以上两个规则为普通规时出现的情况是什么?(make将会出错并提示错误信息)

当同一个目标出现在多个双冒号规则中时,规则的执行顺序和普通规则的执行顺序一样,按照其在Makefile中的书写顺序执行。

GNU make的双冒号规则给我们提供一种根据依赖的更新情况而执行不同的命令来重建同一目标的机制。一般这种需要的情况很少,所以双冒号规则的使用比较罕见。一般双冒号规则都需要定义命令,如果一个双冒号规则没有定义命令,在执行规则时将为其目标自动查找隐含规则。

makefile中的伪目标,强制目标和双冒号规则

----伪目标---- target : commands 如果makefile 所在目录没有target 同名文件:make target 则导致commands 总是被执行。 ...
  • educast
  • educast
  • 2013年07月21日 19:10
  • 2875

makefile超级详细规则

 什么是makefile?或许很多Winodws的程序员都不知道这个东西,因为那些Windows的IDE都为你做了这个工作,但我觉得要作一个好的和professional的程序员,makefil...
  • xkq_lyx
  • xkq_lyx
  • 2014年01月03日 21:41
  • 2385

shell 编程:冒号 后面跟 等号,加号,减号,问号的意义

缺省值(:-) 如果变量后面跟着冒号和减号,则变量后面跟着是这个变量的缺省值。 $ COMPANY= $ printf “%s/n” “${COMPANY:-Unknown ...
  • trochiluses
  • trochiluses
  • 2013年06月07日 16:04
  • 7265

Makefile中的双冒号规则

双冒号规则就是使用“::”代替普通规则的“:”得到的规则。当同一个文件作为多个规则的目标时,双冒号规则的处理和普通规则的处理过程完全不同(双冒号规则允许在多个规则中为同一个目标指定不同的重建目标的命令...
  • u013256018
  • u013256018
  • 2017年01月14日 11:12
  • 764

makefile双冒号规则

双冒号规则就是使用“::”代替普通规则的“:”得到的规则。当同一个文件作为多个规则的目标时,双冒号规则的处理和普通规则的处理过程完全不同(双冒号规则允许在多个规则中为同一个目标指定不同的重建目标的命令...
  • educast
  • educast
  • 2013年07月21日 19:09
  • 794

makefile中的伪目标,强制目标和双冒号规则

----伪目标---- target : commands 如果makefile 所在目录没有target 同名文件:make target 则导致commands 总是被执行。 ...
  • u011857683
  • u011857683
  • 2017年10月24日 21:27
  • 68

makefile中的伪目标,强制目标和双冒号规则

----伪目标---- target : commands 如果makefile 所在目录没有target 同名文件:make target 则导致commands 总是被执行。 ...
  • educast
  • educast
  • 2013年07月21日 19:10
  • 2875

Makefile 双冒号 ::

转自:              对makefile中:单冒号普通规则和::双冒号规则的理解             双冒号规则 双冒号规则就是使用“::”代替普通规则的“:”得到...
  • m0_37552597
  • m0_37552597
  • 2017年05月13日 11:18
  • 61

[makefile 笔记]之一--Make的工作方式、命令执行、伪目标与冒号

GNU的make工作时的执行步骤入下:(想来其它的make也是类似)      1、读入所有的Makefile。      2、读入被include的其它Makefile。      ...
  • lhf_tiger
  • lhf_tiger
  • 2014年01月16日 14:54
  • 1953

Windows 下的 Makefile 编写(三)推理规则

  • 2010年12月24日 11:27
  • 214KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:makefile双冒号规则
举报原因:
原因补充:

(最多只允许输入30个字)