MinGW Make 抛出“系统找不到指定的路径”错误。

5
我正在尝试在Windows 7上使用cmake生成一个c++项目。在实际创建项目之前,cmake会进行一次快速的工具链(我使用MinGW)测试,这就是我的问题所在。Cmake触发了一个构建操作,最终失败并报错"The system cannot find the path specified."。
我以干燥运行模式(-n)运行了特定的失败Makefile,并手动执行了所有命令:
"C:\Program Files (x86)\CMake\bin\cmake.exe" -E cmake_progress_report C:\SFML\CMakeFiles\CMakeTmp\CMakeFiles 1

echo Building C object CMakeFiles/cmTryCompileExec306416588.dir/testCCompiler.c.obj

C:\PROGRA~2\CODEBL~1\MinGW\bin\gcc.exe    -o CMakeFiles\cmTryCompileExec306416588.dir\testCCompiler.c.obj   -c C:\SFML\CMakeFiles\ CMakeTmp\testCCompiler.c

echo Linking C executable cmTryCompileExec306416588.exe

"C:\Program Files (x86)\CMake\bin\cmake.exe" -E cmake_link_script CMakeFiles\cmTryCompileExec306416588.dir\link.txt --verbose=1

他们都没有错误地执行,让我得到了一个预期的 .exe 文件。然而当我通过 make 运行时,我遇到了错误:
"C:\Program Files (x86)\CMake\bin\cmake.exe" -E cmake_progress_report C:\SFML\CMakeFiles\CMakeTmp\CMakeFiles 1

The system cannot find the path specified.

mingw32-make.exe: *** [CMakeFiles/cmTryCompileExec306416588.dir/testCCompiler.c.obj] Error 1

我尝试用类似于“dir”的简单命令替换所有命令,并注意到当通过make运行时,它会在打印出dir信息并以错误退出之前再次返回“系统找不到指定的路径”。

接下来,我的下一步是使用-d标志运行make;有趣的部分是:

Creating temporary batch file C:\Users\CJ\AppData\Local\Temp\make8664-1.bat
Batch file contents:
    @echo off
    "C:\Program Files (x86)\CMake\bin\cmake.exe" -E cmake_progress_report C:\SFML\CMakeFiles\CMakeTmp\CMakeFiles 1
"C:\Program Files (x86)\CMake\bin\cmake.exe" -E cmake_progress_report C:\SFML\CMakeFiles\CMakeTmp\CMakeFiles 1
CreateProcess(C:\Users\CJ\AppData\Local\Temp\make8664 1.bat,C:\Users\CJ\AppData\Local\Temp\make8664-1.bat,...)
Putting child 00490378 (CMakeFiles/cmTryCompileExec306416588.dir/testCCompiler.c.obj) PID 4730176 on  the chain.
Live child 00490378 (CMakeFiles/cmTryCompileExec306416588.dir/testCCompiler.c.obj) PID 4730176
Main thread handle = 00000074
The system cannot find the path specified.
Reaping losing child 00490378 PID 4730176
Cleaning up temp batch file C:\Users\CJ\AppData\Local\Temp\make8664-1.bat
mingw32-make.exe: ***  [CMakeFiles/cmTryCompileExec306416588.dir/testCCompiler.c.obj] Error 1

我对make内部运作并不是很了解,但根据输出结果看来与make生成的临时批处理文件有关。我查看了这篇stackoverflow帖子What causes GNU Make to shell out,似乎触发生成临时文件的原因比较模糊。我找到了一个没有生成临时批处理文件的命令(Windows Git bin中的"ls"),确实通过make执行而没有像"dir"命令那样导致生成临时文件出现"The system cannot find the path specified"响应。

我觉得我的调试能力已经达到了极限,所以我转向你们寻求建议。我的假设是否正确?你们对问题可能的表现有什么见解?


2
我曾经遇到过类似的问题,原因是我的杀毒软件,你可以尝试暂时禁用它。 - Antonio
1
@Antonio:我曾经也遇到这个问题--请查看此问题和答案 - TonyK
2个回答

4
看起来我似乎已经自己解决了问题,对于发帖造成的麻烦我很抱歉。事实证明问题不在Make上,而是在cmd本身(这可以解释为什么每当Make尝试运行批处理文件时都会出现错误)。看起来某种恶意软件可能偷偷进入了我的系统,或者是某种误导性的Windows更新,将命令处理器的注册表键设置为类似于“C:\Users\CJ\AppData\Roaming\Microsoft\Windows\IEUpdate\RMActivate_ssp.exe”的内容,我记得不久前从计算机中删除了它,因此每当通过make产生一个cmd进程时,“系统找不到指定的路径。”消息就会出现(我想当我打开根cmd进程时我完全忽略了它)。无论如何,遵循https://superuser.com/questions/727316/error-in-command-line-the-system-cannot-find-the-path-specified上的说明进行简单修复后,我就能够顺利运行make,随后运行cmake,没有任何问题。
涉及的键是:HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor\AutoRun和/或HKEY_CURRENT_USER\Software\Microsoft\Command Processor\AutoRun

Sysinternals Autoruns可以轻松检查相关的注册表键是否存在可疑条目(并清理它们)。 - ivan_pozdeev
@Ssawa,我能给你买一只熊吗?我以前遇到过这个问题,但这个答案让我想起了这件事。 - Refael Ackermann

0

如果您在普通的 shell 中运行 Cmake,但选择了 MSYS 工具集,则会出现此错误。在这种情况下,make 尝试编译类似于 /c/source/build/stuff.cpp 的内容,而正常的 Windows ABI 则会拒绝此路径。

对于此问题的一个很好的诊断方法是使用 Cmake 的 --debug-trycompile 标志。如果出现问题,您可以手动重新运行失败的命令或查看生成的文件以找到原因。


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