【问题标题】:mingw make can't handle spaces in path?mingw make 不能处理路径中的空格?
【发布时间】:2011-08-25 08:44:54
【问题描述】:

我正在尝试编译代码,使用 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 似乎无法理解其中包含空格的路径。真的吗?有办法解决吗?

【问题讨论】:

  • 您是否尝试在整个路径+文件名周围加上引号并在其中包含空格?
  • @jonsca - makefile 是由 qmake 自动生成的。我希望 qmake 能够创建有效的 makefile,否则它在 Windows 上到底有什么用?
  • 是的,但是文档和设置位让其他软件困惑了一段时间。当他们将其更改为 \Users\name\Documents 时,他们终于在 Vista 和 W7 中正确使用了它。由于您的 meshlab 项目可能没有以任何方式绑定到该路径,请尝试将其移动到 c:\projects\ 或其他位置。

标签: windows makefile mingw


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

    来自the MinGW "Getting Started" guide

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

    我怀疑在运行可执行文件时发现的相同问题也会在其他文件中表现出来。您可以尝试将整个内容(文件规范)包含在双引号中,这可能可以工作,但 Windows 有时在这方面不像基于 UNIX 的 shell 那样合乎逻辑。


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

    【讨论】:

    • 空间并不邪恶。无法处理它们的环境是邪恶的。
    • 完全同意...空间并不邪恶。无法处理它们的环境是邪恶的!回到 8.3 文件/目录名称还是什么? ^^ .....
    【解决方案3】:

    不确定这是否有用(害怕被否决),但我创建了一个语义链接以避免带有空格的路径。不确定它是否能解决问题,因为在我的场景中,在我使用与 pthreads 相关的语义链接后,它显示了一个不同的错误,但我仍然无法修复。

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

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

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

    【讨论】:

    • 你的意思是一个符号链接
    【解决方案4】:

    很抱歉破坏了这个,但我遇到了类似的问题,我可以使用 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
    

    并且没有错误。希望这对未来的旅行者有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-01
      • 1970-01-01
      相关资源
      最近更新 更多