CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  C语言

makefile中使用编译器自动生成依赖关系的一小问题

楼主Sanco(十扇门)2006-06-01 16:57:45 在 C/C++ / C语言 提问

近来,看一makefile教程中说使用编译器自动生成依赖关系用以下方式。  
  e.g.  
   
  %.d:   %.c  
          @set   -e;   rm   -f   $@;   \  
          gcc   -MM   ${CFLAGS}   $<   >   $@.$$$$;   \  
          sed   's,\($*\)\.o[:]*,\1.o   $@   :   .g'   <   $@.$$$$   >   $@;   \  
          rm   -f   $@.$$$$  
   
  以上式子的目的是,将自动生成的依赖关系,修改后再保存在后缀.d的文件中  
  比如,自动生成的关系:main.o:   main.c   defs.h,  
  则转化为:main.o   main.d:   main.c   defs.h  
   
  然后,将.d的文件导入到主makefile中,如下:  
   
  include   ${sources:.c=.d}  
   
  上面的sed没必要看懂,我的问题是,为什么要将main.o:   main.c   defs.h   转化为   main.o   main.d:   main.c   defs.h?  
   
  我觉得没必要啊?main.d只跟main.c有关,干嘛还要跟defs.h有关呢?  
  请赐教。  
  问题点数:100、回复次数:10Top

1 楼jixingzhong(瞌睡虫·星辰)回复于 2006-06-02 09:26:12 得分 20

没研究过这个,  
  是否任意文件都需要这个   defs.h   ?  
   
  就如同   VC   中的   stdafx.h   ....Top

2 楼hslinux(幻世龙)回复于 2006-06-02 09:44:14 得分 20

main.c依赖defs.h,也就是defs.h中定义有main.c需要的东东.Top

3 楼zidane_yubo(天涯独尊)回复于 2006-06-02 16:50:45 得分 20

defs.h   里面是依赖关系啊Top

4 楼lucky520()回复于 2006-06-02 19:26:07 得分 20

.o依赖于.h,.c当.h.c的时间比.o的时间晚后,就要重新compileTop

5 楼happytang(一只叫苏格拉底的猪)回复于 2006-06-02 19:48:50 得分 0

建议看看     GNU   Make   使用手册(中译版)  
  这里的defs.h是所有OBJ文件的共同的一个依赖Top

6 楼happytang(一只叫苏格拉底的猪)回复于 2006-06-02 19:49:53 得分 20

http://lsec.cc.ac.cn/~peace/articles/gnumaketranslated.html  
  GNU   Make   使用手册(中译版)Top

7 楼Sanco(十扇门)回复于 2006-06-05 10:44:49 得分 0

include   ${sources:.c=.d}   means:  
  e.g.  
  ${sources}   =   test1.c   test2.c   main.c  
  so:     include   test1.d   test2.d   main.d  
   
  test1.d   test2.d   main.d都被作为makefile导入到主makefile中。  
   
  main.c   依赖   defs.h   没错,我只是觉得   main.d   没必要依赖   defs.h  
   
  不知道我有没有说明白。:-)Top

8 楼zidane_yubo(天涯独尊)回复于 2006-06-05 17:10:26 得分 0

你不这样写就没必要   %.d:   %.c  
  这样写了   就要检查依赖关系  
   
  Top

9 楼Sanco(十扇门)回复于 2006-06-09 18:57:44 得分 0

我大致了解了。按照堆栈的思想就没错的。Top

10 楼Sanco(十扇门)回复于 2006-06-09 19:11:55 得分 0

好像在散分。我认为我的问题刚好就是答案。答案就是:没必要。  
  不要迷信书上讲的(虽然大部分是正确的),自己亲手去做才知道。  
  Top

相关问题

关键词

得分解答快速导航

  • 帖主:Sanco
  • jixingzhong
  • hslinux
  • zidane_yubo
  • lucky520
  • happytang

相关链接

  • C/C++ Blog
  • C/C++类图书
  • C/C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo