mingw make无法处理路径中的空格?

时间:2011-05-14 02:51:07

标签: windows makefile mingw

我正在尝试编译代码,使用qmake创建的makefile。 当我运行mingw32-make时出现以下错误:

cd bzip2-1.0.5\ && c:\QtSDK\Desktop\Qt\4.7.3\mingw\bin\qmake.exe c:\Documents an
d Settings\user\My Documents\Visual Studio 2010\Projects\meshlab\meshlab\meshla
b\src\external\bzip2-1.0.5\bzip2-1.0.5.pro -o Makefile
Cannot find file: c:\Documents.
Cannot find file: and.
Cannot find file: Settings\user\My.
Cannot find file: Documents\Visual.
Cannot find file: Studio.
Cannot find file: 2010\Projects\meshlab\meshlab\meshlab\src\external\bzip2-1.0.5
\bzip2-1.0.5.pro.
mingw32-make: *** [bzip2-1.0.5\Makefile] Error 2

由于错误,mingw32-make似乎无法理解其中包含空格的路径。真的吗?有办法解决吗?

4 个答案:

答案 0 :(得分:8)

在Linux / UNIX中执行此操作的常用方法是使用反斜杠转义每个空格,例如:/c/Documents\ and\ Settings/User但是,这在MinGW中并不总是有效。

因此,请使用短(8.3)名称。您可以使用Windows(而非MinGW)命令for %I in (<PATH>) do @echo %~sI获取短名称,其中<PATH>可以是.(显示当前目录,如pwd),*(列出当前文件)目录),特定的文件路径等。

顺便说一下,要从糟糕的cmd.exe窗口中复制,请单击标题栏左上角的图标,转到“属性”,“选项”,然后启用“快速编辑模式”。然后,您可以使用鼠标选择文本。 Enter键(或菜单&gt;编辑&gt;复制)将文本复制到剪贴板。插入键(或菜单&gt;编辑&gt;粘贴)粘贴它。

答案 1 :(得分:7)

来自the MinGW "Getting Started" guide

  

MinGW可能会遇到包含空格的路径问题,如果没有,通常与MinGW一起使用的其他程序会遇到此类路径的问题。因此,我们强烈建议您不要在路径名称引用中带有空格的任何位置安装MinGW;即你应该避免安装到“程序文件”或“我的文档”等任何子目录中。

我怀疑在运行可执行文件时发现的相同问题也会与其他文件一起显示出来。您可以尝试将整个事物(文件规范)包装在双引号中,并且此可能可以工作,但Windows有时不像此区域中基于UNIX的shell那样合乎逻辑。


无论如何文件名中的空格都是邪恶的: - )

答案 2 :(得分:7)

不确定这是否有用(担心被投票),但我创建了一个语义链接以避免带空格的路径。不确定它是否会解决问题,因为在我的场景中,在我使用了与pthreads相关的语义链接之后,我仍然无法解决这个问题时出现了不同的错误。

使用命令提示符创建语义链接:

mklink /j "C:\newshortcut" "C:\Program Files\Directory with spaces"

然后在您要运行的命令上,使用 C:\ newshortcut

答案 3 :(得分:1)

很抱歉取消此规则,但是我遇到了类似的问题,并且可以使用cygpath对其进行修复。

对于我来说,我试图为Visual Studio创建一个环境变量:

export DEVENV="/c/Program Files (x86)/Microsoft Visual Studio/2019/Community/Common7/IDE/devenv.com
echo $DEVENV
$DEVENV $1 /build "Release|win64"

这将导致:

/c/Program Files (x86)/Microsoft Visual Studio/2019/Community/Common7/IDE/devenv.com
-bash: /c/Program: No such file or directory

解决方案是使用cygpath -w将带空格的路径转换为8.3文件名:

export DEVENV=$(cygpath -w -s "/c/Program Files (x86)/Microsoft Visual Studio/2019/Community/Common7/IDE/devenv.com")
echo $DEVENV
$DEVENV $1 /build "Release|win64"

这将导致:

C:\PROGRA~2\MICROS~1\2019\COMMUN~1\Common7\IDE\devenv.com

,没有错误。希望这对将来的旅行者有帮助。