2015-04-04 282 views
1

我想在Windows 7上使用cmake生成一個C++項目。在它實際上使項目儘管它看起來cmake做了一個工具鏈(我使用MinGW)的快速測試,這就是我的問題。 Cmake觸發一個make構建,最終失敗並顯示響應「系統找不到指定的路徑」。MinGW使投擲「系統找不到指定的路徑。」錯誤

我跑了在運行模式(N)失敗,手動執行的所有命令的具體生成文件:

"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文件按預期執行。然而,當通過化妝跑我返回錯誤:

"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 

然後我用簡單的東西,如「目錄」替換所有命令的實驗,發現當通過化妝跑回到「系統cannort找不到指定的路徑「再次打印出目錄信息並退出時出現錯誤。

我的下一步,就我所知,是用-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 

我真的不知道太多關於化妝的內部運作,但是從我可以從這個輸出它看起來像它有事情做與臨時批處理文件,使告訴正在做。我看着這個stackoverflow post What causes GNU Make to shell out,它看起來像觸發一個臨時文件是非常模糊的。我能夠找到一個沒有創建臨時批處理文件(從Windows Git bin中的「ls」)執行的命令,並且確實已經通過make執行了,而不會返回「系統找不到指定的路徑」響應,如「目錄「命令did(」dir「導致生成該臨時文件)。

我覺得我用我的調試能力打了一堵牆,現在轉向你們,看看你們能否提供任何建議。這似乎是我做出正確的假設?你有沒有洞察什麼可能表明這個問題?

+1

我曾經有一個類似的問題,原因是我的防病毒,你可以看到如果你想暫時禁用它。 – Antonio 2015-04-04 21:01:59

+0

@Antonio:我有同樣的問題 - 請參閱[這個問題和答案](https://stackoverflow.com/q/43378159/428857)。 – TonyK 2017-06-11 12:17:13

回答

1

它看起來像我能夠找出自己的問題,所以很抱歉與帖子打擾。事實證明,問題不在於Make,而是在於cmd本身(它會解釋每次嘗試運行批處理文件時的錯誤)。它看起來像某種方式(可能通過某種惡意軟件,偷偷到我的系統或可能是某種誤導的Windows更新)命令處理器的註冊表項設置爲類似於「C:\用戶\ CJ \應用程序數據\漫遊\微軟\ Windows \ IEUpdate \ RMActivate_ssp.exe「,我記得在不久之前從我的計算機上清除,因此」系統找不到指定的路徑「。消息每當一個cmd進程由make產生時(我想我打開root 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

+0

[Sysinternals Autoruns](https://technet.microsoft.com/en-us/sysinternals/bb963902.aspx)將允許您輕鬆地檢查相關注冊表項以查找可疑條目(並清除它們)。 – 2017-04-27 21:25:17

0

,如果你在挑選的CMake MSYS工具集也可能發生這種錯誤,但一個正常的shell下運行它。在這種情況下,make會嘗試編譯類似/c/source/build/stuff.cpp的東西,而正常的Windows ABI將拒絕此路徑。

這個問題的一個很好的診斷方法是Cmake的標誌爲--debug-trycompile。如果出現問題,您可以手動重新運行失敗的命令或查看生成的文件以查找原因。

相關問題