痛苦的版本对齐(3) cygwin下的路径引用(sed解决篇)
上次问题(见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解决篇)的更多相关文章
- 痛苦的版本对齐(3) cygwin下的路径引用
[续<痛苦的版本对齐(2) 和时间的相关性>]http://www.cnblogs.com/yvivid/p/3541142.html 初步定位,如下告警为.depend文件路径问题导致. ...
- 【记录】cygwin下折腾个人配置环境
(本文由hcbbt发布,转载请注明出处,blog.csdn[dot]net/hcbbT) cygwin是windows下的linux的模拟环境,不仅可以执行linux的各种命令,可以在cyg ...
- cygwin下的vim 的vimrc配置
1.一直接照 vim 在linux的配置使用 cygwin下的 vi. vim --version 之后,出现了帮助...
- iOS的UILabel设置居上对齐,居中对齐,居下对齐
在iOS中默认的UILabel中的文字在竖直方向上只能居中对齐,博主参考国外网站,从UILabel继承了一个新类,实现了居上对齐,居中对齐,居下对齐.具体如下: // // myUILabel.h ...
- cygwin下配置alias
主要是cygwin下的盘符映射关系容易忘,直接用mount命令: 所以,找到E:\cygwin64\home\Administrator下面的.bashrc,添加alias.如下:
- cygwin下java报错“找不到或无法加载主类”的故障排除
win7 下安装了java,命令行下可以正常运行,cygwin下报错:找不到或无法加载主类. 经排查发现是cygwin的~/.bash_profile中画蛇添足的配置了$CLASSPATH: JAVA ...
- cygwin 下安装python MySQLdb
cygwin 下安装python MySQLdb 1) cygwin 更新 运行 cygwin/setup-x86_64.exe a 输入mysql,选择下面的包安装: libmysqlclient- ...
- Cygwin下编译的程序不使用Cygwin.dll即可运行的命令 及常用命令简介
cc -mno-cygwin foo.c 1.$ ps PS的相关用法: QuoteUsage ps [-aefl] [-u uid]-f = show process uids, ppids-l = ...
- 在cygwin下创建的文件位于windows的哪个目录下?
答: 1. C盘的SPB_Data目录下 2. 在cygwin下通过pwd命令可以查看,例如: jello@jello ~ $ pwd /cygdrive/c/SPB_Data (/cygdrive/ ...
随机推荐
- 查看软件安装的位置 Ubuntu
Ubuntu和windows不一样,不是所有的软件都在一个文件夹,而是不同类型的分散在不同的文件夹下 所以查找起来也是不同的 如果知道是用 apt-get install 方法安装的,可以直接用 dp ...
- oauth2(spring security)报错method_not_allowed(Request method 'GET' not supported)解决方法
报错信息 <MethodNotAllowed> <error>method_not_allowed</error> <error_description> ...
- Jquery | 基础 | 属性过滤选择器
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- SQL-添加字段处理
1.alter table [dbo].[SiteTracks] drop constraint DF__SiteTrack__Audit__47DBAE452.ALTER TAB ...
- Java图解
java虚拟机 JVM运行过程: java开发工具包 java入门图解1 java入门图解2 java入门图解3 java入门图解4
- django 相关问题
和数据库的连接 session的实现 django app开发步骤 python环境准备 数据库安装 model定义 url mapping定义 view定义 template定义 如何查看数据库里的 ...
- 16G 手机清理
1.16G 手机清理 清理top 5 的应用的缓存即可 2,hw wife 连接模块 低于 app wifi 的连接模块. 在同样的电脑热点面前,hw 连补上电脑热点,apple 可以连上电脑热点. ...
- C8051特点
C8051与传统51的区别在于优先权交叉开关.系统时钟.SFR寄存器几个方面: 一 优先权交叉开关:传统的51外设功能是固定分配或者复用分配到指定引脚,而C8051则是通过优先权交叉开关设置,即要想分 ...
- 伟景行 citymaker 从入门到精通(2)——工程图层树加载
工程树是指explorer左边这棵树 本例子实现了图层树加载,点击节点切换可视状态 树控件使用easyui的树 html部分 onCheck:treeProjectTreeOnCheck是指树节点的o ...
- sprintf使用时需要注意的问题