衆所周知VSCode是全宇宙最好用的編輯器 (霧
配置了很久,今日終于配置完成了,還是有點麻煩的,本文是為了友善一些不懂怎麼配置的小白,以及還有一些美化教程。
一、安裝
Visual Studio Code是一款免費而且強大的編輯器,你可以直接在官方進行下載下傳,本文是針對Windows系統進行安裝使用。
官網:
https://code.visualstudio.com/下載下傳安裝即可,安裝時候記得勾選添加到環境變量選項。
二、語言
新版VSCode的預設語言是英語,我們首先将其更改為中文
按快捷鍵Ctrl+Shift+P打開指令視窗,搜尋>lang
然後打開下面這個選項Configure Display Language,如下圖

打開後然後如下圖
"en"即為英語,将其修改為"zh-CN"然後重新啟動VSCode即可。
若是沒有成功修改語言,則是沒有下載下傳中文語言包,我們可以在擴充中搜尋Chinese,安裝第一個擴充再次重新啟動即可。如下圖
三、編譯配置
首先我們先試試如何建立一個C++檔案,左上角打開檔案夾,打開一個檔案,注意檔案路徑不能有中文,如下圖
然後就可以在檔案夾内建立檔案了。如下圖
然後就可以建立一個cpp檔案進行編寫,但進行到這裡僅僅隻是能夠編寫代碼而已,因為VSCode并不是一個IDE,他隻是一個編輯器,是以我們還得自己配置編譯環境,我們首先在擴充商店安裝如下擴充(不是一定要安裝下面的,但是我推薦都安裝一下)。
- C/C++
- Code Runner
- C/C++ Advanced Lint
- C++ Intellisense
- C/C++ Clang Command Adapter
- C/C++ Snippets
- C++ Algorithm Mnemonics
- Native Debug
具體每個擴充的功能都在安裝界面有介紹。
然後我們安裝編譯環境,這裡我安裝的是MingGW64+Clang。
- LLVM Download Page Pre-Built Binaries中的Clang for Windows (64-bit),不需要下.sig檔案
- MinGW-w64 - for 32 and 64 bit Windows
Clang下載下傳好了以後安裝。安裝時選擇Add LLVM to the system PATH for all users。安裝完了以後可能會彈出cmd說MSVC integration install failed。這個是因為Clang預設使用的是msvc的工具鍊,而我們安裝了MinGW,是以就不用管這個提示。
MinGW安裝的時候Architecture選x86_64,裝好以後把東西全部複制到Clang的檔案夾裡去,還要自己把MinGW的bin檔案夾加到環境變量path中。
打開CMD輸入clang -v如果顯示版本号即安裝完成了。如下圖
然後就可以進行編譯了,我們編寫了一個hello.cpp,然後按下面的操作進行編譯運作
運作成功,此時我們以及可以通過VSCode進行C/C++代碼編寫以及運作。
後面我們可以配置幾個.json檔案修改一些編譯參數。
先建立一個你打算存放代碼的檔案夾(稱作工作區),路徑不能含有中文和空格。然後打開VS Code,選打開檔案夾,選擇剛才那個檔案夾,點VS Code上的建立檔案夾,名稱為.vscode,然後建立 launch.json,tasks.json,settings.json,c_cpp_properties.json放到.vscode檔案夾下,注意在VSCode進行建立.vscode檔案夾,至于為什麼你可以試試直接在檔案中建立(Windows不支援檔案夾開頭為.)。
如下圖
launch.json代碼:
該檔案除stopAtEntry可根據自己喜好修改外,無需更改。除非你不用windows,則可以用llvm調試
// https://github.com/Microsoft/vscode-cpptools/blob/master/launch.md
{
"version": "0.2.0",
"configurations": [
{
"name": "(gdb) Launch", // 配置名稱,将會在啟動配置的下拉菜單中顯示
"type": "cppdbg", // 配置類型,這裡隻能為cppdbg
"request": "launch", // 請求配置類型,可以為launch(啟動)或attach(附加)
"program": "${fileDirname}/${fileBasenameNoExtension}.exe", // 将要進行調試的程式的路徑
"args": [], // 程式調試時傳遞給程式的指令行參數,一般設為空即可
"stopAtEntry": false, // 設為true時程式将暫停在程式入口處,我一般設定為true
"cwd": "${workspaceRoot}", // 調試程式時的工作目錄
"environment": [], // (環境變量?)
"externalConsole": true, // 調試時是否顯示控制台視窗,一般設定為true顯示控制台
"MIMode": "gdb", // 指定連接配接的調試器,可以為gdb或lldb。但目前lldb在windows下沒有預編譯好的版本。
"miDebuggerPath": "gdb.exe", // 調試器路徑。
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": false
}
],
"preLaunchTask": "Compile" // 調試會話開始前執行的任務,一般為編譯程式。與tasks.json的taskName相對應
}
]
}
View Code
tasks.json代碼:
該檔案reveal可根據自己喜好修改,-std根據自己的情況修改。如果不想要額外警告,把-Wall那一條删去。
如果使用Clang編譯C語言,把command的值改成clang。
如果使用MinGW,編譯C用gcc,編譯c++用g++,并把-target和-fcolor那兩條删去。
// https://code.visualstudio.com/docs/editor/tasks
{
"version": "2.0.0",
"tasks": [
{
"taskName": "Compile", // 任務名稱,與launch.json的preLaunchTask相對應
"command": "clang++", // 如果用MinGW,編譯C用gcc,編譯c++用g++
"args": [
"${file}",
"-o", // 指定輸出檔案名,不加該參數則預設輸出a.exe
"${fileDirname}/${fileBasenameNoExtension}.exe",
"-g", // 生成和調試有關的資訊
"-Og",
"-Wall", // 開啟額外警告
"-static-libgcc", // 靜态連結
"-fcolor-diagnostics",
"--target=x86_64-w64-mingw", // 預設target為msvc,不加這一條就會找不到頭檔案
"-std=c++1z" // c++1z即c++17,C語言最新标準為c11,或根據自己的需要進行修改
], // 編譯指令參數
"type": "shell",
"group": {
"kind": "build",
"isDefault": true // 設為false可做到一個tasks.json配置多個編譯指令,需要自己修改本檔案,我這裡不多提
},
"presentation": {
"echo": true,
"reveal": "silent", // 設定是否在“終端”中顯示編譯資訊,可以為always,silent,never。一些錯誤提示也在這裡,但是因為有靜态檢測,我就設為silent了。
"focus": false,
"panel": "shared" // 不同的檔案的編譯資訊共享一個終端面闆
},
"problemMatcher": {
"owner": "cpp",
"fileLocation": [
"relative",
"/"
],
"pattern": {
"regexp": "^(.*):(\\d+):(\\d+):\\s+(warning|error):\\s+(.*)$", // 正規表達式,用于描述在“問題”欄中顯示的資訊。
"file": 1,
"line": 2,
"column": 3,
"severity": 4,
"message": 5
}
} // 1.11.0的更新日志裡說可以直接寫"problemMatcher": "$gcc",但是我試了一下不行。
}
]
}
settings.json代碼:
如果你沒有合并Clang和MinGW,則該檔案中頭檔案的路徑必需修改成MinGW的路徑,否則Lint無效。版本号(這裡是7和7.1.0)如果不同,也要修改。輸gcc -v可以看到)
Windows下的路徑為反斜杠,原本應使用兩個反斜杠來轉義,但直接用斜杠在VS Code中也接受
// 将設定放入此檔案中以覆寫預設值和使用者設定。
{
"files.defaultLanguage": "c", // ctrl+N建立檔案後預設的語言
"c-cpp-flylint.cppcheck.enable": false,
"c-cpp-flylint.flexelint.enable": false,
"c-cpp-flylint.run": "onType", // 此選項貌似不起作用
"c-cpp-flylint.clang.includePaths": [
"${workspaceRoot}",
"C:/llvm/lib/gcc/x86_64-w64-mingw32/7.1.0/include/c++",
"C:/llvm/lib/gcc/x86_64-w64-mingw32/7.1.0/include/c++/x86_64-w64-mingw32",
"C:/llvm/lib/gcc/x86_64-w64-mingw32/7.1.0/include/c++/backward",
"C:/llvm/lib/gcc/x86_64-w64-mingw32/7.1.0/include",
"C:/llvm/include",
"C:/llvm/x86_64-w64-mingw32/include",
"C:/llvm/lib/gcc/x86_64-w64-mingw32/7.1.0/include-fixed"
],
"c-cpp-flylint.clang.defines": [
"_DEBUG",
"UNICODE",
"__GNUC__=7",
"__cdecl=__attribute__((__cdecl__))"
],
"c-cpp-flylint.standard": [
"c11", // 如果你想要使用c89,就自己改
"c++1z" // c++1z即c++17
],
"code-runner.runInTerminal": true, // 設定成false會在“輸出”中輸出,無法互動
"code-runner.executorMap": {
"c": "cd $dir && clang $fileName -o $fileNameWithoutExt.exe -Wall -g -Og -static-libgcc -fcolor-diagnostics --target=x86_64-w64-mingw -std=c11 && $dir$fileNameWithoutExt",
"cpp": "cd $dir && clang++ $fileName -o $fileNameWithoutExt.exe -Wall -g -Og -static-libgcc -fcolor-diagnostics --target=x86_64-w64-mingw -std=c++1z && $dir$fileNameWithoutExt"
},
"code-runner.saveFileBeforeRun": true,
"C_Cpp.clang_format_sortIncludes": true,
"C_Cpp.errorSquiggles": "Disabled"
}
c_cpp_properties.json代碼:
如果你沒有合并Clang和MinGW,則該檔案中頭檔案的路徑必需修改成MinGW的路徑,否則IntelliSense無效。版本号如果不同,也要修改。
{
"configurations": [
{
"name": "Win32",
"intelliSenseMode": "clang-x64",
"includePath": [
"${workspaceRoot}",
"C:/llvm/lib/gcc/x86_64-w64-mingw32/7.1.0/include/c++",
"C:/llvm/lib/gcc/x86_64-w64-mingw32/7.1.0/include/c++/x86_64-w64-mingw32",
"C:/llvm/lib/gcc/x86_64-w64-mingw32/7.1.0/include/c++/backward",
"C:/llvm/lib/gcc/x86_64-w64-mingw32/7.1.0/include",
"C:/llvm/include",
"C:/llvm/x86_64-w64-mingw32/include",
"C:/llvm/lib/gcc/x86_64-w64-mingw32/7.1.0/include-fixed"
],
"defines": [
"_DEBUG",
"UNICODE",
"__GNUC__=7",
"__cdecl=__attribute__((__cdecl__))"
],
"browse": {
"path": [
"C:/llvm/x86_64-w64-mingw32/include",
"C:/llvm/lib/gcc/x86_64-w64-mingw32/7.1.0/include",
"C:/llvm/lib/gcc/x86_64-w64-mingw32/7.1.0/include-fixed",
"C:/llvm/include/*",
"${workspaceRoot}"
],
"limitSymbolsToIncludedHeaders": true,
"databaseFilename": ""
}
}
],
"version": 2
}
然後就可以在工作區進行編寫代碼了。
四、其他
關于.exe,這樣編寫下來肯定會有很多.exe檔案,會占空間,雖然可能占不了多少空間,但更重要的是會和代碼夾雜在一起,非常不友善查找代碼,我提供下面兩個方法快速删除.exe檔案
第一種方法是把生成的檔案的目錄指定到一個特定的目錄,裡面都放的是exe。修改一下json檔案不難做到。
第二種方法是在cmd下輸一條删除該目錄及子目錄下所有exe的指令:
del /q /s *.exe,
不過小心不要把路徑寫錯了
第三種方法,到工作區的目錄下搜尋*.exe就都出來了。