make编译笔记(三)

本文详细介绍了GNU make中的双冒号规则,解析了双冒号规则与普通规则的区别,以及如何根据文件更新执行不同命令。同时,讲解了自动产生依赖的功能,如GCC的-M和-MM参数,推荐的头文件依赖描述文件生成方式。此外,还涵盖了书写命令的技巧,如显示命令、命令执行与错误处理,以及makefile中变量的基本操作和高级用法,包括条件判断的应用。
摘要由CSDN通过智能技术生成

双冒号规则

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

在Make中,一个目标可以出现在多个规则中,但这些规则必须是同一种规则,要么都是普通规则,要么都是双冒号规则,不允许同一个目标同时出现在两种不同的规则中。

冒号规则和普通规则的处理的不同:

  • 双冒号规则中当依赖文件比目标更新时,规则将会被执行。对于没有依赖只有命令行的双冒号规则,当引用此目标时,规则的目标将会被无条件执行。普通规则中,当规则的目标文件存在时,此规则的命令永远不会被执行(目标文件永远是最新的)
  • 当同一个文件作为多个双冒号规则的目标时,这些不同的规则会被独立地处理,而不是像普通规则那样那样合并所有依赖到一个目标文件。对这些规则的处理就像多个不同的普通规则,多个双冒号规则中的每一个依赖被改编后,make只执行此规则定义的命令,而其他的以这个文件作为目标的双冒号规则不会被执行。

例:

Newprog::foo.c
    $(CC) $(CFLAGS)$< -o $@
Newprog::bar.c
    $(CC) $(CFLAGS)$< -o $@

 如果foo.c文件被修改,执行make以后目标Newprog将根据foo.c文件被重建;如果bar.c被修改,那么目标Newprog将根据bar.c被重建。如果以上为普通规则,make会报错。

当同一个目标出现在多个双冒号规则中,规则的执行顺序和普通规则的执行顺序一样。

GUN make

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值