2017-03-09 57 views
0

我正在从Cygwin构建一个项目。除此之外,GCC编译器创建依赖文件,然后调用sed脚本来“修复”依赖文件。Sed脚本在类似平台上的行为不同

后脚本完成后,在一个系统的相关文件包含作为例子,这样的:

src/man/man.o: \[LF] 
../include/debug.h \[LF] 
../include/sys.h ../include/types.h \[LF] 

,并在另一个系统行尾由脚本改为:

src/man/man.o: /[CR][LF] 
../include/debug.h /[CR][LF] 
../include/sys.h ../include/types.h /[CR][LF] 

正斜线和[CR][LF]的第二种情况打破了构建。

为什么脚本的行为不同?

这里是至关重要的sed行:

@sed -i -e's/\\\(.\)/\/\1/g' $(@:.o=.d) ;\ 

谁能破译为什么它依赖于系统的?

回答

1
sed -i -e's/\\\(.\)/\/\1/g' 

查找反斜杠(\\),其次是东西(.)(即不在结束线),并用斜杠替换它,再加上不管它是遵循(\1).. 。

$(@:.o=.d) 

...在依赖文件中...? (以前没见过这一点,但它看起来像“每个.o相应.d

其余的看起来无关你的问题。

这是把一个粗暴的方式部分将Windows路径到Unix的路......我猜在那里<CR>(不知道在哪里来自)使得这种无法正常工作。

如果添加了一个dos2unix之前摆脱会发生什么的<CR>

define DEPEND_HACK 
    @dos2unix $(@:.o=.d) ;\ 
    sed -i -e's/\\\(.\)/\/\1/g' $(@:.o=.d) ;\ 
    .... 
+0

你说得对,结尾[CR]混淆了脚本。毕竟,它看起来像我的DOS风格的行结尾是根本原因,我仍然需要找出为什么我的系统行结尾是不同的。 – Danijel

相关问题