問題來源
因為筆者想用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!!!