Windows下make clean指令錯誤[錯誤碼2](系統找不到指定檔案)的解決方案

MrBlue_and_MrGreen發表於2020-08-18

問題來源

  因為筆者想用GCC編譯器進行Windows下的C語言程式設計,安裝了Mingw-w64的x86_64-posix-seh版本,並按照Visual Studio Code官方的教程,將Mingw-w64的bin目錄正確新增到了環境變數path中,cmd下可呼叫gcc、gdb等指令。

  後來又遇到多檔案編譯問題,筆者百度之後發現Mingw-w64自帶了make工具。不過這個make工具的名字是mingw32-make.exe(bin目錄下)。於是,筆者按照網上的做法,將其複製到同一目錄下並改名為make.exe。由於bin目錄已經新增到環境變數中,這樣操作之後,cmd下就可以直接使用make指令了。

  筆者使用Visual Studio Code作為程式碼編輯器,並直接在Terminal視窗中敲命令編譯、執行程式,一切正常。花了好大力氣入門了makefile檔案的編寫之後,筆者呼叫make指令,也能正確連結編譯,得到正確的程式。

  然而,當筆者敲下make clean刪除.o檔案時,Terminal提示錯誤:系統找不到指定檔案。

  

 

 

   這是筆者拙劣的makefile程式碼:

main.exe : main.o func.o
    gcc main.o func.o -o main.exe

main.o : main.c hstd.h
    gcc -c main.c

func.o : func.c hstd.h
    gcc -c func.c

clean :
    rm main.exe,main.o,func.o

   這段程式碼沒有明顯的語法語義錯誤,完全符合makefile的規則和Windows下Powershell的語法規則,可問題確實存在。以管理員身份執行Powershell之後,問題依然沒有解決。

解決之路

   在bing和百度上搜尋這個問題,花了大半天的時間,不論是在csdn還是部落格園抑或是其他小網站上,都沒有找到合適的解決方案。

   偶然間,筆者注意到一個網站沒有嘗試過,那就是筆者這邊訪問速度奇慢無比的Stackoverflow。。。

   結果,筆者在Stackoverflow上找到了問題的根源:

  

 

    原來make.exe使用的不是Powershell而是cmd!!!

    試驗時候發現,cmd下果然預設不能呼叫rm指令:

  

 

    Powershell下可以(小技巧:這裡rm不加引數直接按Enter鍵可以新增多個要刪除的目錄/檔案,如果不輸入任何東西再按一次回車就可以退出rm回到shell):

  

 

   於是筆者簡單修改了makefile檔案(就把rm換成cmd下能呼叫的del):

main.exe : main.o func.o
    gcc main.o func.o -o main.exe

main.o : main.c hstd.h
    gcc -c main.c

func.o : func.c hstd.h
    gcc -c func.c

clean :
    del main.exe,main.o,func.o

  VSCode的Terminal中敲下make clean,沒有報錯。

  

  還是那句話:make.exe使用的不是Powershell而是cmd!!!

相關文章