Cygwin $'\r': command not found错误

3

我对一个项目进行了一些修改,调试时它可以正常工作。但是当我尝试在没有调试的情况下构建它时,出现了错误,无法解决问题。

        $ make
        Making all in third_party
        make[1]: Entering directory '/cygdrive/c/Users/alimjan/Documents/fast-hlground/slim-2.2.7/third_party'
        Making all in zdelta-2.1
        make[2]: Entering directory '/cygdrive/c/Users/alimjan/Documents/fast-hlground/slim-2.2.7/third_party/zdelta-2.1'
        gcc -DHAVE_CONFIG_H -I. -I../../src     -Wall -export-dynamic -O3  -fopenmp -MT inffast.o -MD -MP -MF .deps/inffast.Tpo -c -o inffast.     o inffast.c
        mv -f .deps/inffast.Tpo .deps/inffast.Po
        gcc -DHAVE_CONFIG_H -I. -I../../src     -Wall -export-dynamic -O3  -fopenmp -MT inflate.o -MD -MP -MF .deps/inflate.Tpo -c -o inflate.     o inflate.c
       mv -f .deps/inflate.Tpo .deps/inflate.Po
       gcc -DHAVE_CONFIG_H -I. -I../../src     -Wall -export-dynamic -O3  -fopenmp -MT inftrees.o -MD -MP -MF .deps/inftrees.Tpo -c -o inftre     es.o inftrees.c
       mv -f .deps/inftrees.Tpo .deps/inftrees.Po
       gcc -DHAVE_CONFIG_H -I. -I../../src     -Wall -export-dynamic -O3  -fopenmp -MT infutil.o -MD -MP -MF .deps/infutil.Tpo -c -o infutil.     o infutil.c
       mv -f .deps/infutil.Tpo .deps/infutil.Po
       gcc -DHAVE_CONFIG_H -I. -I../../src     -Wall -export-dynamic -O3  -fopenmp -MT adler32.o -MD -MP -MF .deps/adler32.Tpo -c -o adler32.     o adler32.c
       mv -f .deps/adler32.Tpo .deps/adler32.Po
       gcc -DHAVE_CONFIG_H -I. -I../../src     -Wall -export-dynamic -O3  -fopenmp -MT zd_mem.o -MD -MP -MF .deps/zd_mem.Tpo -c -o zd_mem.o z     d_mem.c
       mv -f .deps/zd_mem.Tpo .deps/zd_mem.Po
       gcc -DHAVE_CONFIG_H -I. -I../../src     -Wall -export-dynamic -O3  -fopenmp -MT zutil.o -MD -MP -MF .deps/zutil.Tpo -c -o zutil.o zuti     l.c
       mv -f .deps/zutil.Tpo .deps/zutil.Po
       rm -f libzd_in_slim.a
       ar cru libzd_in_slim.a deflate.o infblock.o infcodes.o inffast.o 
       inflate.o inftrees.o infutil.o adler32.o trees.o zd_mem.o zdelta.o zu     til.o
       ranlib libzd_in_slim.a
       make[2]: Leaving directory '/cygdrive/c/Users/alimjan/Documents/fast-hlground/slim-2.2.7/third_party/zdelta-2.1'
       make[2]: Entering directory '/cygdrive/c/Users/alimjan/Documents/fast-hlground/slim-2.2.7/third_party'
      make[2]: Nothing to be done for 'all-am'.
      make[2]: Leaving directory '/cygdrive/c/Users/alimjan/Documents/fast-hlground/slim-2.2.7/third_party'
      make[1]: Leaving directory '/cygdrive/c/Users/alimjan/Documents/fast-hlground/slim-2.2.7/third_party'
      Making all in src
      make[1]: Entering directory '/cygdrive/c/Users/alimjan/Documents/fast-hlground/slim-2.2.7/src'
      /bin/sh ./genconfig
      ./genconfig: line 2: $'\r': command not found
      ./genconfig: line 8: $'\r': command not found
      ./genconfig: line 10: $'\r': command not found
      ./genconfig: line 13: $'\r': command not found
      ./genconfig: line 16: $'\r': command not found
      ./genconfig: line 19: $'\r': command not found
      ./genconfig: line 20: $'cat\r': command not found
      ./genconfig: line 21: $'cat\r': command not found
      ./genconfig: line 22: $'\r': command not found
      ./genconfig: line 61: $'\r': command not found
      ./genconfig: line 62: $'\r': command not found
      ./genconfig: line 86: $'\r': command not found
      ./genconfig: line 87: $'\r': command not found
      ./genconfig: line 88: $'\r': command not found
      make[1]: *** [Makefile:1558: arch.h] Error 127
       make[1]: Leaving directory '/cygdrive/c/Users/alimjan/Documents/fast-hlground/slim-2.2.7/src'
       make: *** [Makefile:425: all-recursive] Error 1

现在,我无法使用/不使用调试构建它。如何解决这个问题?请帮忙。

1
可能是使用了 Windows 的换行符 \r\n 而不是 \n。请参考这个回答。 - Paul Rooney
@PaulRooney 你的意思是在C程序中使用'\r\n'而不是'\n'吗? - arslan
1
无论 genconfig 正在读取什么文件,都会因为 \r(回车)字符而感到不满意。这些字符是从 Windows 复制文本文件时未删除回车符的典型症状。 - Jonathan Leffler
2个回答

7

genconfig是一个shell脚本,它使用DOS换行符进行编写。这种换行符会导致/bin/sh在运行脚本时出现混淆。您应该使用dos2unix将其转换为UNIX换行符。


我正在安装dost2unix。那么我必须在genconfig上运行它吗? - arslan
我以“:dostounix genconfig”的形式运行它,然后运行'./configure'和'make',但仍然无法工作。我做错了什么吗? - arslan
@arslan,你能重新运行dos2unix并只运行make而不运行./configure吗? - fjardon
还有一个名为'genconfig.in'的文件。在对'genconfig'和'genconfi.in'都运行了dos2unit之后,它就可以工作了。你帮了我很多,现在我可以睡觉了,哈哈!谢谢 :) - arslan

6

当使用像记事本、notepad++等编辑器在Windows上编写脚本时,可能会遇到换行符(EOL)转换问题。

Notepad++有一个选项可以转换换行符(EOL)。如何操作:进入“编辑”> “EOL转换”> 选择“Unix/OSX”。

这样做后,保存脚本文件并运行它即可。它会正常工作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接