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

有关跟我学写MAKEFILE里的自动生成依赖性

    来源: 互联网  发布时间:2016-10-18

    本文导语:  啃了跟我学写MAKEFILE半天发现实在啃不动了,里面1.5.8那节里的自动生成依赖性里的这段代码谁能解释下吗?最好一句一句的慢慢说下明白好吗?或者谁给我点相关的资料能让我读懂下面这段话的,并且理解这个东西到底怎...

啃了跟我学写MAKEFILE半天发现实在啃不动了,里面1.5.8那节里的自动生成依赖性里的这段代码谁能解释下吗?最好一句一句的慢慢说下明白好吗?或者谁给我点相关的资料能让我读懂下面这段话的,并且理解这个东西到底怎么用,谢谢哈

     %.d: %.c
     @set -e; rm -f $@; 
     $(CC) -M $(CPPFLAGS) $ $@.$$$$; 
     sed 's,($*).o[ :]*,1.o $@ : ,g'  $@; 
     rm -f $@.$$$$

|
首先你需要学习一个什么叫nakefile内部自动变量,之后就能看懂了。

|
$$$$:
整个脚本(从@set -e 到 rm -f $@.$$$$)会在一个shell里执行,
$$$$在Makefile转义后是传给shell的是$$也就是shell的进程号,
作为临时文件的唯一标识。

sed 's,($*).o[ :]*,1.o $@ : ,g'

将:

hello.o hello.d : hello.c /usr/include/stdio.h /usr/include/sys/stdsyms.h 
  /usr/include/sys/types.h /usr/include/sys/stdsyms.h 
  /usr/include/sys/_inttypes.h /usr/include/sys/stdsyms.h 
  /usr/include/machine/vmtypes.h /usr/include/sys/_fd_macros.h 
  /usr/include/sys/_null.h /usr/include/sys/_size_t.h 
  /usr/include/sys/stdsyms.h /usr/include/string.h 
  /usr/include/sys/_inttypes.h /usr/include/sys/_null.h



hello.o : hello.c /usr/include/stdio.h /usr/include/sys/stdsyms.h 
  /usr/include/sys/types.h /usr/include/sys/stdsyms.h 
  /usr/include/sys/_inttypes.h /usr/include/sys/stdsyms.h 
  /usr/include/machine/vmtypes.h /usr/include/sys/_fd_macros.h 
  /usr/include/sys/_null.h /usr/include/sys/_size_t.h 
  /usr/include/sys/stdsyms.h /usr/include/string.h 
  /usr/include/sys/_inttypes.h /usr/include/sys/_null.h

|
同求,感觉只能看懂一部分

|
%.d: %.c
    @set -e; rm -f $@; 
    $(CC) -M $(CPPFLAGS) $ $@.$$$$; 
    sed 's,($*).o[ :]*,1.o $@ : ,g'  $@; 
    rm -f $@.$$$$

第一句:
set -e设置成这种情况,如果某个命令的返回参数非0,那么整个程序立刻退出. rm -f是删除之前编译的.d文件。
第二句:
编译依赖文件,并把它的名字根据进程号命名成一个临时文件,用进程号命名是一个技巧,这样重名的可能性很小。
第三句:
sed后面''里面是一个sed命令。整个命令的结构是s,match,replace,g, 其中s后面的,号就是常见的/,一般写成s/pattern/pattern/的形式,但也可以把/替换成其他符号,比如这里是逗号。g是全局的意思,具体你查查sed。match和replace都是正则表达式。match部分,要先解析makefile的元字符,$*和$@,这个你查查makefile。()是为了后面的引用,后面的1就是引用这里(和)之间括起的部分模式。[ :]也很好理解,你查查正则表达式的文档。其他的应该很好理解了。整句话的意思是把临时文件做一个修改然后写入目标文件。这个修改是这样的,临时文件的第一行是
my-c-file.o: my-c-file.c ...
修改后是
my-c-file.o my-c-file.d : my-c-file.c ...
第四句:
不用说了吧

    
 
 

您可能感兴趣的文章:

 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • ​有关Docker的八个令人难以置信的事实
  • 有关内码转换(跟HttpServletRequest有关)
  • 求有关png图像处理的libpng库的有关中文资料
  • 大家推荐一下有关LINUX7有关的网络编程的书。最好是比较全面的!比较经典的。
  • 求教有关smartupload的问题,有关就给分!!
  • 有关KDevelop-3.0.4-0.1.i386.rpm的有关软件包
  • 有关在sco unix5.0.4下有关网卡设置的问题(非常急,高分相送)
  • 有关snmp的一个很菜,但是困扰了我很久的问题,有关工作原理的,望大家赐教
  • 有关KDevelop编程的资料
  • 有关集群与数据同步
  • 请教有关英文简历方面的词句!
  • 有关报表打印(在JAVA,WEB下应用)急用!
  • 请各位大哥告知JAVA中消息机制的有关资料,拜托!
  • 有关cocoon的问题??
  • 有关jbuilder
  • 我想看看有关Linux和Unix的源码,有什么好的建议
  • 有关J2ME的帮助文档!
  • 100分求助 能不能提供一些有关图像分割的算法和实现代码!谢谢
  • 在哪里可以弄到有关tomcat配置方面的资料?
  • Helper! 有关Jbuilder使用问题???
  • 有关swing的问题,请高手回答


  • 站内导航:


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

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3