Makefile:.d依赖文件

24 篇文章 1 订阅
11 篇文章 3 订阅
本文介绍了如何在Makefile中处理C/C++项目中头文件的依赖关系。通过手动维护或者利用编译器的-M或-MM选项自动生成依赖关系,确保当头文件更改时,相应的.o文件能够被正确重建。此外,还提到了将.d文件纳入Makefile的技巧,以简化维护工作。
摘要由CSDN通过智能技术生成

https://blog.csdn.net/huao798480517/article/details/8691018

1. 在Makefile中,我们的依赖关系可能会需要包含一系列的头文件,比如,如果我们的main.c中有一句“#include "defs.h"”,那么我们的依赖关系应该是: 
main.o : main.c defs.h
如果main.c 中包含了很多头文件,那main.o后面要跟N多的.h。你在加入或删除头文件时,也需要小心地修改Makefile。

2. 类似于如下的依赖关系只是建立了.o和.cc之间的依赖关系,那么.cc 改变时.o 会被重新编译。但.cc 中包含的.h改变时并不会影响到.o的重编。

%.o: %.cc
 @echo "=======> Compiling $@"
 $(CPP) $(CPPFLAGS) -c -o $@ $<

所以需要建立*.o 和*.h的依赖。但往往*.h非常多,修改起来麻烦。

3. 大多数的C/C++编译器都支持一个“-M”的选项,即自动找寻源文件中包含的头文件,并生成一个依赖关系。例如,如果我们执行下面的命令: 
    cc -M main.c  其输出是: 
    main.o : main.c defs.h
于是由编译器自动生成的依赖关系,这样一来,你就不必再手动书写若干文件的依赖关系,而由编译器自动生成了。需要提醒一句的是,如果你使用GNU的C/C++编译器,你得用“-MM”参数,不然,“-M”参数会把一些标准库的头文件也包含进来。 
 cc -MM UartDev.cc 会在UartDev.d中生成如下内容。

UartDev.o UartDev.d: UartDev.cc ../../common/log.h UartDev.h ../../common/thread.h

从而,当某个.h 文件改变时会引起.o .d的重新编译。

当然还要在Makefile中包含.d文件:

DEPS+= $(SRCS:.cc=.d)

include $(DEPS)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值