
一. 前情
平時用的 IDE(集成開發(fā)環(huán)境)是 Dev-Cpp,因為只是學習階段,代碼還上不了千行,個人認為不需要 VS 那種高大全,VC6.0 又有些地方(不只是審美)不順眼。
但最近又發(fā)現(xiàn)當把 C++ 代碼文件復制到 Ubuntu 18.04 編譯運行時,漢字部分總會亂碼,因為encoding(字符編碼)的問題,Ubuntu只認UTF-8,Windows只認ANSI,Ubtuntu雖然我能讓VIM顯示ANSI,卻做不到讓終端顯示,而Windows 上的 Dev-Cpp 不能設置encoding為 UTF-8,所以想改用 Notepad++ 這個 Editor(編輯器)增加 Compiler (編譯器)的功能。
環(huán)境:win7。Notepad++。Dev-Cpp。
二. 步驟
1. 配置編譯器
change:

選中“mingw32-gcc-g++-bin”的“mark for installation”,選擇右上角“Installation”的“Apply Changes”即可。另外幾項我沒安裝的時候也沒什么問題,后來出了點別的問題,求保險才裝的??偣惭b了不到 400MB。
2. 編輯環(huán)境變量

控制面板\所有控制面板項\系統(tǒng),高級系統(tǒng)設置→環(huán)境變量,在“Administrator 的用戶變量”欄找 PATH 變量,無則新建,有則編輯,變量名為“PATH”,變量值在原有的基礎上增加一條“C:\MinGW\bin;”,該值與每個人把 MinGW 安裝的位置有關,因人而異?!?”的意義在于當 PATH 的值有多項時,用它把這些項分開。
3. 兩種方法檢查前兩步是否成功

進入 cmd 控制臺,輸入gcc -v或g++ -v查看已加入到環(huán)境變量中的編譯器版本。顯示黃框中的內容屬于正常,說明前兩步成功。
創(chuàng)建一個簡單的 C++ 源代碼文件,要保證代碼正確能運行。例如 Hello.cpp:
//Hello.cpp
#include<iostream>?
using namespacestd;
int main()
{
????cout<<"Hello world, 世界你好!"<<endl;
????return0;?
}
在 cmd 控制臺 cd 到該源代碼的目錄,然后執(zhí)行g++ Hello.cpp -o Hello.exe,然后執(zhí)行Hello.exe /k命令,能正常運行也能說明前兩大步沒問題。
前一條命令是用 g++ 編譯器編譯這個源代碼并輸出 exe 文件到這個目錄,后一條是運行 exe 文件(/k 參數(shù)使其運行后停留在程序界面,與之相對的 /c 會使其關閉。即 keep 與 close 的對比)。前面兩條命令其實可以用“&&”合為一條,即g++ Hello.cpp -o && Hello.exe Hello.exe /k。
到這里已經成功一大半了,因為如你所見,已經可以在 cmd 控制臺編譯并運行源代碼了,而賦予 Notepad++ 這個能力,只是讓 Notepad++ 一步“對當前打開的源文件用 cmd 執(zhí)行編譯、運行命令”而已。
4. Notepad++ 增加運行命令
打開 Notepad++,按 F5 調出“運行”。復制后面說到的命令,運行即可,建議保存,名稱隨意。

也可以在工具欄中找“運行(R)”
參考了多個關于 Notepad++ 運行命令和 cmd 命令的資料,經修改后我的命令是cmd /k pushd "$(CURRENT_DIRECTORY)" && g++ -o "$(NAME_PART).exe" "$(FULL_CURRENT_PATH)" && "$(NAME_PART)".exe & PAUSE & EXIT(無分行,是一整條命令),要理解這條命令的話可以將其一分為六,即:
(1)cmd /k:打開 cmd 控制臺,運行完程序讓其停留而不自動關閉。
(2)pushd "$(CURRENT_DIRECTORY)":將工作路徑更換到源文件所在的路徑,例如'pushd E:\kkk'相當于 cmd 中先e:再cd kkk,這條命令在源代碼要調用同目錄文件而只寫了相對路徑時尤為重要。因為 Notepad++ 的默認工作路徑是它自己的安裝路徑。
(3)g++ -o "$(NAME_PART).exe" "$(FULL_CURRENT_PATH)":調用環(huán)境變量中的編譯器 g++.exe 來將源代碼編譯成同名 exe 文件并輸出到相同路徑。
(4)"$(NAME_PART)".exe:運行源代碼編譯出的可執(zhí)行文件。
(5)PAUSE:暫停,提示“按任意鍵繼續(xù)”,配合下一條命令實現(xiàn)“按任意鍵關閉”的效果,兩者都沒有的話程序運行完就會秒關。
(6)EXIT:關閉 cmd 控制臺,沒有的話按任意鍵會退到 cmd 命令臺,等待輸入下一條命令。
·$(CURRENT_DIRECTORY)代表文件所在目錄的路徑。
·$(NAME_PART)表示該文件無后綴部分的文件名。
·$(FULL_CURRENT_PATH)代表當前完整的文件路徑。
·雙引號(半角):用于防止目錄或文件名中含空格的情況。
·“&&”和“&”:前者表示上一條命令正常執(zhí)行完再執(zhí)行下一條命令,非正常則不執(zhí)行下一條;后者無顧慮。例如一分為六后的后兩條子命令,表示不管源代碼編譯、運行是否成功,都會出現(xiàn)“按任意鍵繼續(xù)”字樣,并且按任意鍵后關閉 cmd 控制臺。
三. 后續(xù)
折騰了接近半天后,發(fā)現(xiàn)和 Ubuntu 一樣,只是讓編輯器能顯示 UTF-8,卻做不到控制臺顯示。也就是 Notepad++ 能顯示 UTF-8/ANSI,但運行后 cmd 控制臺還是只認 ANSI。