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

〈跟我一起写Makefile〉 疑问 请教

    来源: 互联网  发布时间:2017-03-29

    本文导语:  本帖最后由 everysmile 于 2013-01-08 20:15:55 编辑 〈跟我一起写Makefile〉中有如下一段代码以及描述如下: %.d: %.c @set -e; rm -f $@; / $(CC) -M $(CPPFLAGS) $ $@.$$$$; / sed 's,/($*/)/.o*,/1.o $@ : ,g'  $@; / rm -f $@.$$$$ 总而言之...

本帖最后由 everysmile 于 2013-01-08 20:15:55 编辑
〈跟我一起写Makefile〉中有如下一段代码以及描述如下:
%.d: %.c
@set -e; rm -f $@; /
$(CC) -M $(CPPFLAGS) $ $@.$$$$; /
sed 's,/($*/)/.o*,/1.o $@ : ,g'  $@; /
rm -f $@.$$$$

总而言之,这个模式要做的事就是在编译器生成的依赖关系中加入文件的依赖,即把依赖关
系:
main.o : main.c defs.h
转成:
main.o main.d : main.c defs.h


有些地方没有弄的太明白,高手指点一下:
1)我不太明白,为什么需要将main.d添加进去。
我的理解为:自动生成了main.d,其中包含了依赖关系:main.o : main.c defs.h,然后再通过Include将main.d包含到Makefile中。后续程序在编译的时候即可找到main.o的依赖关系即可完成main.o的编译操作,为什么还要完成将 “main.o : main.c defs.h 转成:main.o main.d : main.c defs.h”的操作呢?

2)顺带问个小问题:@set -e; 有什么作用?

高手、版主不吝赐教,多谢多谢~~

|
这是一个类似于hack的做法,目的就是为了检测header file的变化

比如说我有a.c include a.h, a.h include  一开始都没有问题

a.d: a.c
a.o: a.c a.h stdio.h

现在我加入一个header b.h,a.h include b.h

因为目前 a.d 中 仍然是 a.o 会检测 a.h的变化,所以这一次改动会导致a.o 重新生成,那么下次你改b.h的时候就没有这么幸运了,因为a.d 中没有b.h 的依赖

所以这个hack就是强制a.d 跟随header file同步,让a.d 把b.h 也加入到依赖中

set -e 是所谓的erronexit,简单说就是shell中任何command 出错都导致exit shell,(实际比这个复杂),初衷是为了加强错误检测,详情可见 http://www.davidpashley.com/articles/writing-robust-shell-scripts.html#id2596016

|


是的啊

    
 
 

您可能感兴趣的文章:

  • 请教根据Makefile.am自动生成Makefile的问题
  • 请教一个简单makefile的写法
  • 请教点的Makefile文件语法?
  • 请教一个makefile的问题?
  • 请教Makefile文件编写
  • 请教makefile的使用方法。
  • 请教下,各位作MakeFile时用Automake这个工具么
  • 急切请教一个关于makefile的问题,万分感谢。
  • 请教makefile中的 ifeq else default
  • 我是初学,请教大家gdb,dbx,makefile,cc的用法.
  • makefile请教!
  • 请教makefile中的一个规则
  • 请教,Makefile目标文件要通配目录下所有C文件,如何写?
  • 100分请教高手一个Makefile的小问题
  • 请教关于makefile的问题,该怎么写?
  • 请教makefile问题
  • 请教makefile文件编写问题
  • MAKEFILE自动生成依赖关系问题请教
  • 请教:linux unix 下makefile的问题
  • 高分请教:下面的makefile是什么意思?
  • makefile的一些疑问
  • makefile疑问
  • u-boot 关于makefile的疑问
  • 关于Makefile的一个疑问
  • makefile中.DEFAULT的疑问
  • Makefile编写疑问,需要这么麻烦吗?
  • makefile 的规则疑问,请教。
  • 对 linux C 编程 makefile书写的疑问(三)
  • 对 linux C 编程 makefile书写的疑问(二)
  • 对 linux C 编程 makefile书写的疑问
  • Makefile的疑问
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 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?
  • .net/c#/asp.net iis7站长之家
  • 怎麼樣使Makefile.in生成Makefile?
  • 【急!】一个程序里有好多文件夹里都有Makefile,如何找到最管用的makefile
  • 【makefile使用】请问怎样在shell中获取makefile的最终目标?
  • unix下面make makefile文件,提示“makefile is up-to-date",怎么办呀?
  • Makefile使用遇到的问题!"Makefile:3:missing the separator.stop"在线等待.......
  • Makefile是如何输出执行的路径的,表示执行的是那个Makefile
  • 下的tar.gz源码里只有makefile.in和makefile.am
  • 一句 makefile 的解释 -- makefile 与 shel 结合
  • linux makefile error :Makefile:335: *** commands commence before first target。
  • [test@localhost ~]$ cat <makefile >catfile 跟cat > catfile <makefile是一样的吧?
  • 关于makfile,makefile.in, makefile.am. configure之间的关系
  • win32下编译Linux 下的项目(makefile.am和makefile.in)
  • 关于makefile的问题。一个makefile如何生成两个可执行文件。


  • 站内导航:


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

    ©2012-2021,