2017-03-09 54 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