VS Code C\C++ 環境搭建 踩坑日記
前言
是的,我原來一直用的是一個野生 IDE (小熊貓 Dev C++)。就是圖一個一鍵安裝,夠用就完事兒了,不像 VS Code 配置極其煩人。
但是吧,VS Code 的內建 Git 支持,雲同步,多語言支持,無敵拓展性等等等等東西。這也太香了!!
所以呢,寫一篇這個博客來記錄一下我痛苦的配置流程,權當一篇學習筆記。也是為了我自己以后在新環境配置的時候能有一個資料用以參考。
本文中的所有配置都是在 Windows 環境下完成。僅供參考。
網絡上的資料水准真的都太參差不齊了。甚至我看到的一部分資料放到現在已經完全失效。
幸運的是,我最終還是找到了一個靠譜的資料來源。
VS Code 官網上的 Documentation,雖然都是英文的,但是微軟背書,保證靠譜。
強烈推薦去看官方的文檔!!
基本依賴
MinGW----Minimalist GNU for Windows
MinGW-w64 的安裝可以自己去完善找包來安裝,也可以通過管理平台來安裝。
微軟官方的 Documentation 里面使用的是 MSYS2 來管理 MinGW .
所以,我們用 MSYS2 來管理我們電腦中的 MinGW。
按照官網的操作來。
安裝
打開安裝包,一路下一步。
配置
更新包列表
打開 MSYS2 的 bash,輸入如下命令更新包。
pacman -Syu
pacman -Su
選擇包
輸入一下命令,獲取 MinGW64 的所有包的列表。
pacman -S --needed base-devel mingw-w64-x86_64-toolchain
你會看到這樣的輸出 (我的輸出會少一些,因為我已經安裝過了)
:: There are 10 members in group mingw-w64-x86_64-toolchain:
:: Repository mingw64
1) mingw-w64-x86_64-gcc-ada 2) mingw-w64-x86_64-gcc-fortran
3) mingw-w64-x86_64-gcc-libgfortran 4) mingw-w64-x86_64-gcc-objc
5) mingw-w64-x86_64-gdb-multiarch 6) mingw-w64-x86_64-libgccjit
7) mingw-w64-x86_64-libmangle-git 8) mingw-w64-x86_64-pkgconf
9) mingw-w64-x86_64-tools-git 10) mingw-w64-x86_64-winstorecompat-git
依次選擇 mingw-w64-x86_64-gcc
,mingw-w64-x86_64-make
,mingw-w64-x86_64-gdb
(調試工具)。
等待聯網下載安裝,速度慢可以換鏡像源或者掛個梯子。
添加環境變量
在 環境變量
-系統變量
-Path
中添加一條新的路徑
C:\msys64\mingw64\bin(默認路徑,可根據本機情況設置)
重啟 VS Code。若工作目錄下無任何配置,VS Code 會自動識別到 MinGW 的位置。
CMake----自動生成 C/C++ Makefile
在第二次寒假作業中,需要用到多文件編譯。VS Code 並未集成該功能,需要我們手動配置一下。
打開 CMake 的官網,找到 Windows 的安裝包下載並安裝。
安裝的時候勾上 添加到系統變量
。
更多內容可以參考,CMake 入門實戰 | HaHack
VS Code 插件
到 VS Code 的插件市場里面找到如下插件並安裝。
- 微軟自帶的 C\C++ 包裝上
- Code Runner (單文件直接用這個編譯運行就好了,省事)
- CMake
- CMake Tools
(可選) C/C++ Project Generator [替代 CMake,直接生成 Makefile,不太好用]
配置 VS Code
所有配置工作完成了之后記得登錄微軟賬號,同步全局設置。
下次就不用在調試了,直接登陸,一鍵同步就好了。
多文件編譯
多文件編譯完全可以參考微軟官方關於 CMake 配置的文檔 Get started with CMake Tools on Linux。
雖然是適用於 Linux 平台的文檔,但是 Windows 下也是完全適用的。
沒有中文就是了,全英文的看着有點點費勁。
簡要記錄一下關鍵步驟。
- 將
CMake Generator
設置為 MinGW。
-
修改 CMakefile
CMakefile 的默認設置下是不會自動關聯文件夾內的所有文件的。
要實現這一點需要再 CMakefile 中加入以下內容。
aux_source_directory(. DIR_SRCS)
add_executable(projectname ${DIR_SRCS})
還有,如果要打開編譯器的所有警告要加入以下內容
add_compile_options(-Wall -Wextra)
為什么使用 CMake
照理來說,在 Linux中,一般 C/C++ 項目的編譯是依賴於 make 程序 讀取 Makefile 來實現的.
但是呢,每個項目都自己寫 Makefile 比較麻煩,並且這里還有一個學習門檻。
於是乎,CMake工具誕生了。CMake 工具能夠為我們大幅度簡化編寫 Makefile 的這一步驟,通過 CMakeLists.txt
這個文件為我們自動生成 Makefile
,實現多文件編譯的半自動化。
此外,CMake 還可以為我們提供不同 IDE 之間工程文件的轉換,提供跨平台編譯 C/C++ 項目的特性。
GCC G++的區別
在編譯運行源代碼的時候,VS Code 會彈出一個窗口讓你選擇使用那個編譯器。gcc 和 g++ 就在供你選擇的列表當中。這個要怎么選擇呢?
先說結論,gcc 和 g++ 是兩個不同的東西。
一般來說,在編譯 C 語言程序的時候使用 gcc
在編譯 C++ 語言程序的時候使用 g++
GCC | G++ | |
---|---|---|
對於輸入文件的處理 | 區分.c和.cpp編譯 | 不區分,統一當做cpp編譯 |
是否鏈接 C++ 標准庫 | 不鏈接 STL | 自動鏈接 STL |
Reference GCC與gcc,g++區別 - 心田居士
我遇到的問題
看不到返回值
在 Dev C++ 中,通過 Dev C++ 運行的程序都能夠顯示出程序的返回值和程序運行時間。而在 VS Code 中則沒有這個顯示。
可以從 Dev C++ 里面扣一個 ConsolePauser.exe
出來,用他來運行編譯出來的 exe 文件可以捕獲到程序的返回值。
參考 ConsolePauser 的幫助提示。
Usage: ConsolePauser.exe <0|1>
1 means the STDIN is redirected by Dev-CPP;0 means not
修改 Code Runner 的設置,加到全局設置里面去。
"code-runner.executorMap": {
// ...
"c": "cd $dir && gcc $fileName -o $fileNameWithoutExt && ConsolePauser 0 $dir$fileNameWithoutExt",
"cpp": "cd $dir && g++ $fileName -o $fileNameWithoutExt && ConsolePauser 0 $dir$fileNameWithoutExt",
"objective-c": "cd $dir && gcc -framework Cocoa $fileName -o $fileNameWithoutExt && ConsolePauser 0 $dir$fileNameWithoutExt",
// ...
}
配置完成之后,透過 Code Runner 運行的 C/C++ 程序就能夠顯示程序返回值。
PS D:\Projects\Codes\programming-daily> cd "Your dir" ; if ($?) { gcc hello.c -o hello } ; if ($?) { ConsolePauser 0 .\hello }
Hello, world!
--------------------------------
Process exited after 0.02 seconds with return value 666
編譯選項全部開開
因為之前在 小熊貓 Dev C++ 里面報錯提示就很非常細致。
若要打開編譯器的全部提示以及額外提示,需要在編一下選項中添加如下參數
--Wall
,--Wextra
。
W 表示 Warning
(后來在 C++ Primer里面也看到了推薦打開這個選項的提示)
中文代碼顯示問題
在 VS Code 中,打開含有中文內容的源碼全部都會變成亂碼。
若要恢復中文內容在編輯器中的正常顯示,需要在 VS Code 的右下角找到 UTF-8
(默認)選擇 通過編碼打開
並將編碼改為 GBK
或 GB18030
,結束。
調試中文亂碼問題
發現透過 gdb 運行的程序 中文顯示會亂碼。
推測原因: Powershell 和 gdb 顯示的編碼不同。
一個小竅門,別寫中文代碼。治標又治本。