makefile规则之order-only依赖 ----- |

本文转自:https://blog.csdn.net/Swartz2015/article/details/79828841 

最近在看caffe的代码,首先不得不说caffe的代码写的这是结构清晰,代码简洁。后续我也会写关于caffe源码解析的博文。今天主要是看一下makefile规则里面的一个order-only依赖规则。

我们都知道makefile构建工程的基本语句是:

targets : prerequisites
    command
这句构造语句可以简单理解为,根据prerequisites中的文件,利用command构造规则,构造得到target。makefile的好处只有是当prerequisites中有任何文件发生改变时才重新构造target。但是,有时候我们希望只有当prerequisites中的部分文件改变时才重新构造target。 
这就是order-only prerequisites产生的目的。

具有order-only prerequisites的prerequisites具有如下的形式:

targets : normal-prerequisites | order-only-prerequisites
1
它的功能是,只有第一次构造targets时才会使用order-only-prerequisites,后面即使order-only-prerequisites发生改变,也不会重新构造targets,而只有normal-prerequisites中的文件发生改变时才重新构造targets。

具体我们看一下caffe的makefile里面的一小段用于生成protobuf代码的构造语句:

$(PROTO_BUILD_DIR)/%.pb.o: $(PROTO_BUILD_DIR)/%.pb.cc $(PROTO_GEN_HEADER) \
        | $(PROTO_BUILD_DIR)
    @ echo CXX $<
    $(Q)$(CXX) $< $(CXXFLAGS) -c -o $@ 2> $@.$(WARNS_EXT) \
        || (cat $@.$(WARNS_EXT); exit 1)
    @ cat $@.$(WARNS_EXT)
这句话的意思是,在第一次构造(PROTO_BUILD_DIR)/%.pb.o时,要先构造PROTO_BUILD_DIR,也就是创建这个目录。后面如果这个目录发生改变,则不需要再重新构造(PROTO_BUILD_DIR)/%.pb.o了。

参考: 
Make Doc
 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值