zoukankan      html  css  js  c++  java
  • 痛苦的版本对齐(3) cygwin下的路径引用(sed解决篇)

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

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

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

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

    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

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

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

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

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

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

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

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

    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' $@

    后续要适当学习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

  • 相关阅读:
    IfcFeatureElementAddition
    IfcOpeningElement
    IfcRelNests
    IfcElementAssemblyType
    IfcProjectionElement
    IfcFeatureElement
    IfcRelDefines
    Win10 Anaconda配置tensorflow
    Anaconda升级
    Anaconda 台式机环境
  • 原文地址:https://www.cnblogs.com/yvivid/p/3555040.html
Copyright © 2011-2022 走看看