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

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

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

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

 _depend:    $(obj).depend

 $(obj).depend:    $(src)Makefile $(TOPDIR)/config.mk $(SRCS)
@rm -f $@
@for f in $(SRCS); do \
g=`basename $$f | sed -e 's/\(.*\)\.\w/\1.o/'`; \
$(CC) -M $(HOST_CFLAGS) $(CPPFLAGS) -MQ $(obj)$$g $$f >> $@ ; \
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 包含了 “/”,该符号是 替换操作的分隔符,所以需要用 \/表示“\”为转义符。

 _depend:    $(obj).depend

 $(obj).depend:    $(src)Makefile $(TOPDIR)/config.mk $(SRCS)
@rm -f $@
@for f in $(SRCS); do \
g=`basename $$f | sed -e 's/\(.*\)\.\w/\1.o/'`; \
$(CC) -M $(HOST_CFLAGS) $(CPPFLAGS) -MQ $(obj)$$g $$f >> $@ ; \
done
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

痛苦的版本对齐(3) cygwin下的路径引用(sed解决篇)的更多相关文章

  1. 痛苦的版本对齐(3) cygwin下的路径引用

    [续<痛苦的版本对齐(2) 和时间的相关性>]http://www.cnblogs.com/yvivid/p/3541142.html 初步定位,如下告警为.depend文件路径问题导致. ...

  2. 【记录】cygwin下折腾个人配置环境

    (本文由hcbbt发布,转载请注明出处,blog.csdn[dot]net/hcbbT)      cygwin是windows下的linux的模拟环境,不仅可以执行linux的各种命令,可以在cyg ...

  3. cygwin下的vim 的vimrc配置

    1.一直接照 vim 在linux的配置使用 cygwin下的 vi. vim --version 之后,出现了帮助...

  4. iOS的UILabel设置居上对齐,居中对齐,居下对齐

    在iOS中默认的UILabel中的文字在竖直方向上只能居中对齐,博主参考国外网站,从UILabel继承了一个新类,实现了居上对齐,居中对齐,居下对齐.具体如下: // //  myUILabel.h ...

  5. cygwin下配置alias

    主要是cygwin下的盘符映射关系容易忘,直接用mount命令: 所以,找到E:\cygwin64\home\Administrator下面的.bashrc,添加alias.如下:

  6. cygwin下java报错“找不到或无法加载主类”的故障排除

    win7 下安装了java,命令行下可以正常运行,cygwin下报错:找不到或无法加载主类. 经排查发现是cygwin的~/.bash_profile中画蛇添足的配置了$CLASSPATH: JAVA ...

  7. cygwin 下安装python MySQLdb

    cygwin 下安装python MySQLdb 1) cygwin 更新 运行 cygwin/setup-x86_64.exe a 输入mysql,选择下面的包安装: libmysqlclient- ...

  8. Cygwin下编译的程序不使用Cygwin.dll即可运行的命令 及常用命令简介

    cc -mno-cygwin foo.c 1.$ ps PS的相关用法: QuoteUsage ps [-aefl] [-u uid]-f = show process uids, ppids-l = ...

  9. 在cygwin下创建的文件位于windows的哪个目录下?

    答: 1. C盘的SPB_Data目录下 2. 在cygwin下通过pwd命令可以查看,例如: jello@jello ~ $ pwd /cygdrive/c/SPB_Data (/cygdrive/ ...

随机推荐

  1. USACO Training3.2 01串 By cellur925

    题目传送门 一句话题意:求长度为n的有m个1的大小为第k个的01串. 暑假我做的时候是真·大暴力,用二进制枚举,55分,成功T掉无数点. 正解:开始可以用计数类dp来“预处理”,状态和转移都比较好想. ...

  2. PyCharm - 格式化代码 (Reformat Code)

    1. Ctrl + A全选代码. 2. Code -> Reformat Code

  3. vlc media player

    还是很好用的目前来看 倍速播放: [      减速播放 ]      加速播放 =     恢复原速度

  4. Eclipse - Maven项目Update Project后jdk版本变成1.5

    问题与分析 最近遇到个奇怪的问题,在Eclipse里对一个Maven项目进行Update Project(快捷键是 Alt+F5),原本jdk为1.8的项目忽然就变成了1.5,于是就报了一些错误. 我 ...

  5. Jmeter之Json Path Extractor 接受上一个请求的响应参数

    最近在使用Jmeter进行接口测试,被一个问题困扰了很久,就是第二个请求如何接收上一个请求响应中的参数,刚开始尝试着用网上普遍说的正则表达式,长了了N多次之,都没有达到我想要的效果,被整的够惨,于是, ...

  6. 数组Reduce的应用

    数组Reduce的应用 参考 简单应用 var arr = [1,2,3,4,5] var sum = arr.reduce(function (prev, cur, index, arr) { co ...

  7. CentOS 7不重启刷新磁盘列表

    [root@master-09:29:09 33~]#ls /sys/class/scsi_host/host0 host1 host2[root@master-09:29:55 34~]#echo ...

  8. php传json格式给C++时乱码解决方案

    今天在做给C++传json数据时,C++无法识别到中文 网上查下原因有json只支持utf-8,但是我的整个项目编码都是utf8的,没有出现过其它编码,所以问题还是抛给了C++解决,后来经一高手解答说 ...

  9. Windows API函数大全三

    7. API之位图.图标和光栅运算函数 BitBlt 将一幅位图从一个设备场景复制到另一个 CopyIcon 制作指定图标或鼠标指针的一个副本.这个副本从属于发出调用的应用程序 CopyImage 复 ...

  10. 两个已排序数组的合并-C语言

    最近在纸上写一个已排序数组的合并时,花了超过预期的时间.仔细想想,这种要放到毕业找工作那会两下就出来了,原因还在于工作后对基础没有重视,疏于练习. 说开一点,现在搜索引擎的发达确实给问题的解决带来了便 ...