博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
痛苦的版本对齐(3) cygwin下的路径引用(sed解决篇)
阅读量:5085 次
发布时间:2019-06-13

本文共 1269 字,大约阅读时间需要 4 分钟。

上次问题(见),.depend信息路径错误的问题。

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

 

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

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

1 _depend:    $(obj).depend2 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).depend2 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         done9         sed -i 's/d:/\/cygdrive\/d/g' $@

 

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

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

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

 

扩展阅读

shell中sed用法:

【系统工程师的自我修养】sed篇:

Unix sed实用教程系列目录[已完成]:

转载于:https://www.cnblogs.com/yvivid/p/3555040.html

你可能感兴趣的文章
Java开发代码性能优化总结
查看>>
php 获取某个月的周次信息
查看>>
redis 随笔
查看>>
Java重写《C经典100题》 --30
查看>>
线程池
查看>>
饭店点餐系统
查看>>
bzoj2259 [Oibh]新型计算机
查看>>
centos7下部署iptables环境纪录(关闭默认的firewalle)
查看>>
Sed与Awk 学习笔记
查看>>
【Android Studio】Gradle配置及问题解决
查看>>
实验三-查找与排序-5(选做,加分) 补做
查看>>
加快FineReport报表设计的几个心得体会
查看>>
九九乘法表
查看>>
内存泄露:*.hprof
查看>>
/etc/profile、/etc/bashrc、~/.bash_profile、~/.bash_bashrc
查看>>
查询表中昨天和今天的数据
查看>>
将程序集添加到“全局程序集高速缓存”
查看>>
2017-07-31(触发器,包,游标练习)
查看>>
Oracle PL/SQL Developer - Day 1
查看>>
TimePicker 时间选择器
查看>>