我正在从Cygwin建立一个项目。除此之外,GCC编译器创建依赖文件,然后调用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) ;\
任何人都可以破译为什么它依赖于系统?
答案 0 :(得分:1)
sed -i -e's/\\\(.\)/\/\1/g'
找一个反斜杠(\\
),后跟一些东西(.
)(即不在行尾),并用正斜杠替换它,加上随后的内容( \1
)...
$(@:.o=.d)
...在依赖文件中......? (Haven之前没有见过这个,但看起来像#34;每个.d
对应.o
。)
其余的看起来与你的问题无关。
我猜测这是将Windows路径转换为Unix路径的粗略方式的一部分......我猜测那里的<CR>
(不知道) 来自哪里)使得无法正常运行。
如果您在此之前添加dos2unix
以摆脱<CR>
会怎样?
define DEPEND_HACK
@dos2unix $(@:.o=.d) ;\
sed -i -e's/\\\(.\)/\/\1/g' $(@:.o=.d) ;\
....