首页 > Windows开发 > 详细

痛苦的版本对齐(3) cygwin下的路径引用(sed解决篇)

时间:2014-02-19 16:51:11      阅读:442      评论:0      收藏:0      [点我收藏+]

上次问题(见http://www.cnblogs.com/yvivid/p/3546649.html),.depend信息路径错误的问题。

主要尝试了,在(虚拟机下构建)linux下编译,确实没有问题了。(工具链需要改为linux程序)

 

但回头看来,好像忽视了什么。

对于rules.mk更多的关注了gcc工具,即gcc -M的作用,忽视了 代码中 sed的作用。

bubuko.com,布布扣
1 _depend:    $(obj).depend
2 
3 $(obj).depend:    $(src)Makefile $(TOPDIR)/config.mk $(SRCS)
4         @rm -f $@
5         @for f in $(SRCS); do 6             g=`basename $$f | sed -e s/\(.*\)\.\w/\1.o/`; 7             $(CC) -M $(HOST_CFLAGS) $(CPPFLAGS) -MQ $(obj)$$g $$f >> $@ ; 8         done
bubuko.com,布布扣

重新分析了一下上面 sed的含义。

-e表示执行的匹配模板,

.*表示任意多个字符;\(.*\)是用来做后向引用的,后面的\1就是它了;
\.是一个点,\w用于匹配字母,数字或下划线字符;

实现的功能,将源文件*.c  和 *.cpp 文件变为 *.o, 即提前文件名并改为.o类型名称。

 

sed确实很便利,利用 sed可以较为简单的实现 d:变为 /cygdrive/d ,

在 rules.mk中, 增加 sed -i ‘s/d:/\/cygdrive\/d/g‘ $@

由于 /cygdrive/d 包含了 “/”,该符号是 替换操作的分隔符,所以需要用 \/表示“\”为转义符。

bubuko.com,布布扣
1 _depend:    $(obj).depend
2 
3 $(obj).depend:    $(src)Makefile $(TOPDIR)/config.mk $(SRCS)
4         @rm -f $@
5         @for f in $(SRCS); do 6             g=`basename $$f | sed -e s/\(.*\)\.\w/\1.o/`; 7             $(CC) -M $(HOST_CFLAGS) $(CPPFLAGS) -MQ $(obj)$$g $$f >> $@ ; 8         done
9         sed -i s/d:/\/cygdrive\/d/g $@
bubuko.com,布布扣

 

后续要适当学习sed,和正则表达式,提供工作效率。

遗留的小缺失,所以上面 仅针对 d:进行了替换,如果是其他盘符,还需要修改rules.mk。

后续看看正则表达式是否可以解决。

 

扩展阅读

shell中sed用法:http://www.cnblogs.com/giraffe/p/sed-in-shell.html

【系统工程师的自我修养】sed篇:http://www.cnblogs.com/gnuhpc/archive/2013/02/20/2919340.html

Unix sed实用教程系列目录[已完成]:http://www.cnblogs.com/lazycoding/p/3248289.html

痛苦的版本对齐(3) cygwin下的路径引用(sed解决篇)

原文:http://www.cnblogs.com/yvivid/p/3555040.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!