VS Code C\C++ 環境搭建 踩坑日記


VS Code C\C++ 環境搭建 踩坑日記

前言

是的,我原來一直用的是一個野生 IDE (小熊貓 Dev C++)。就是圖一個一鍵安裝,夠用就完事兒了,不像 VS Code 配置極其煩人。

但是吧,VS Code 的內建 Git 支持,雲同步,多語言支持,無敵拓展性等等等等東西。這也太香了!!


所以呢,寫一篇這個博客來記錄一下我痛苦的配置流程,權當一篇學習筆記。也是為了我自己以后在新環境配置的時候能有一個資料用以參考。

本文中的所有配置都是在 Windows 環境下完成。僅供參考。

網絡上的資料水准真的都太參差不齊了。甚至我看到的一部分資料放到現在已經完全失效。

幸運的是,我最終還是找到了一個靠譜的資料來源。

VS Code 官網上的 Documentation,雖然都是英文的,但是微軟背書,保證靠譜。

強烈推薦去看官方的文檔!!

Visual Studio Code 內置變量定義

基本依賴

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-gccmingw-w64-x86_64-makemingw-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 (默認)選擇 通過編碼打開 並將編碼改為 GBKGB18030,結束。


調試中文亂碼問題

發現透過 gdb 運行的程序 中文顯示會亂碼。

推測原因: Powershell 和 gdb 顯示的編碼不同。

一個小竅門,別寫中文代碼。治標又治本。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM