当前位置:  技术问答>linux和unix

makefile自动生成依赖关系的2个迷惑

    来源: 互联网  发布时间:2017-04-07

    本文导语:  假设我的目录下面有hello.h,hello.cc文件。 root@ubuntu:/home/workspace/Makefile/mf5# g++ -MM hello.cc hello.o: hello.cc hello.h 自动生成.d文件的规则如下: include $(src:.cc=.d) %.d:%.cc         $(cc) -MM $$@.$$$$;         sed 's/$*.o...

假设我的目录下面有hello.h,hello.cc文件。

root@ubuntu:/home/workspace/Makefile/mf5# g++ -MM hello.cc
hello.o: hello.cc hello.h

自动生成.d文件的规则如下:

include $(src:.cc=.d)
%.d:%.cc
        $(cc) -MM $$@.$$$$;
        sed 's/$*.o/$*.o $*.d/g' $@.$$$$ > $@;
        rm -f $@.$$$$


第一次执行make的时候,因为.d文件不存在,所以执行了上面%.d:%.cc这条规则,生成hello.d文件,内容为:
hello.o hello.d: hello.cc hello.h

然后make重新读取hello.d这个文件。读取之后,相当于makefile中有了这样一个只有目标和依赖文件而没有命令的规则:
hello.o hello.d: hello.cc hello.h

但是,%.d:%.cc这条规则也可以用来生成hello.d这个目标,那么hello.d如果需要更新的话,make会选择哪条规则,用来更新hello.d呢?
如果使用
hello.o hello.d: hello.cc hello.h

这条规则来更新hello.d,那么没有命令行,make怎么知道如何生成hello.d呢?

|
makefile中有目标和依赖文件而没有命令的规则:
hello.o hello.d: hello.cc hello.h
“也就是.d文件被include之后,make会试图更新.d文件。”,只有规则没有命令make不知道怎么更新啊,是gcc、g++还是其他命令、带什么参数等将.cc文件转化成.d文件,make命令都不知道,所以在%.d:%.cc这里才更新.d文件

|
%.d:%.cc
        $(cc) -MM $$@.$$$$;
        sed 's/$*.o/$*.o $*.d/g' $@.$$$$ > $@;
        rm -f $@.$$$$

.d的更新用上面的这个命令
.d文件只指明依赖关系而已
可以将include的内容展开看

|
个人理解include $(src:.cc=.d)只是引入一条规则,仅仅是在此处展开该依赖关系,并没有在此处使用;
就好比C中,头文件定义并实现函数fun(),别的文件include头文件仅仅是展开代码,其他地方调用fun()函数时才会执行fun();
呃,我是这样理解的

    
 
 

您可能感兴趣的文章:

  • 请教根据Makefile.am自动生成Makefile的问题
  • [高分求教]怎么自动生成makefile
  • 关于Makefile自动生成头文件依赖的问题
  • MAKEFILE自动生成依赖关系问题请教
  • 运用linux的自动生成Makefile文件时,出现错误
  • 自动生成makefile的问题, C文件成功,但CPP文件失败,请指点.谢谢.
  • 寻 懂的redhat linux 下 . 使用automake和autoconf 自动生成Makefile 的 达人。
  • 怎么看自动生成的Makefile到底做了什么?紧急总动员,满分,在线等待
  • xmkmf,在自动生成Makefile的时候,能不能够指定用gcc编译?请大虾解决
  • cpp文件如何自动生成Makefile文件
  • 求助Makefile的写法:如何为每一个.c文件自动生成其包含的.h文件集合? 内详
  • 有关跟我学写MAKEFILE里的自动生成依赖性
  • 【帮忙测试】——我的一个自动生成Makefile文件
  • 如何通过自动生成的makefile 看各个文件的依赖关系
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 怎麼樣使Makefile.in生成Makefile?
  • 关于makefile的问题。一个makefile如何生成两个可执行文件。
  • 用mkmf生成makefile的问题
  • configure是怎麼樣生成Makefile?
  • Makefile 生成工具 Bakefile
  • Makefile 加上了.PHONY: clear怎么还删不掉生成的中间文件? 谢先!
  • QT程序通过Qmake生成的makefile能不能做make install?
  • autotools生成makefile时如何添加-g参数
  • Makefile 生成工具 Sharity
  • 请推荐生成makefile的工具
  • 怎样用Makefile生成两个可执行文件?
  • 怎样查找makefile下生成的最终的目标!
  • ./configure 不能生成Makefile
  • makefile中如何生成两个目标文件?
  • 哪位朋友能提供一个用gcc生成lib的makefile简单示例?非常急!谢谢!!
  • 两天了,还是没有生成makefile
  • 求助:configure生成的Makefile支持多系统
  • 用makefile编译生成库
  • Makefile怎么写才能让生成的可执行文件让GDB调试呢?
  • 急求!!一个makefile如何生成两个可执行文件
  • Makefile.in,Makefile.am,Makefile.bor应该怎么用?
  • makefile.am和makefile.in是什么文件,与makefile有什么联系吗?
  • 最近在学习linux C 看到了makefile部分,觉得makefile的语法很难理解,Makefile 的语法是不是shell语法?
  • 求解makefile问题,makefile.conf的作用?
  • 从网上载了个C++程序的源代码,包含38个.cpp和.h,还有makefile.in和makefile.am两个文件,但无configure和makefile.请问怎么编译?谢谢!
  • 有makefile.am,有 makefine.in 为什么就是没有Makefile?
  • makefile如何调用文件目录下的makefile
  • 【急!】一个程序里有好多文件夹里都有Makefile,如何找到最管用的makefile
  • 【makefile使用】请问怎样在shell中获取makefile的最终目标?
  • unix下面make makefile文件,提示“makefile is up-to-date",怎么办呀?
  • Makefile使用遇到的问题!"Makefile:3:missing the separator.stop"在线等待.......


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,