VS Code C++ 安裝和環(huán)境配置(MSVC和MinGW)

準(zhǔn)備工作

  • 從官網(wǎng)下載安裝 VS Code: https://code.visualstudio.com/

  • VS Code 本身只是一個(gè)代碼編輯器, 需要手動(dòng)添加編譯器扔字、調(diào)試器

    • 這里選擇MSVC(cl, cdb)和MinGW(gcc/g++, gdb)
    • MSVC可以通過(guò)VS安裝器安裝忧陪,MinGW從官網(wǎng)對(duì)應(yīng)Host下載安裝 MinGW: http://mingw-w64.org/doku.php/download(threads考慮跨平臺(tái)選擇posix標(biāo)準(zhǔn))
    • 安裝完以后將MinGW和MSVC的目錄的bin文件夾添加到環(huán)境變量 Path 路徑
      ( CMD 輸入g++ -vcl驗(yàn)證是否安裝完成)

C++項(xiàng)目創(chuàng)建

  • 手動(dòng)創(chuàng)建一個(gè)工程目錄, 例如MyProjects, 用來(lái)存放代碼
  • 用VS Code打開該工程目錄進(jìn)行配置和coding
  • 推薦用這種方式來(lái)創(chuàng)建一個(gè)工程,方便識(shí)別
  • 在當(dāng)前工程目錄下創(chuàng)建一個(gè).vscode文件夾

共存兩種編譯方式

  • 首先是創(chuàng)建編譯任務(wù)配置文件tasks.jsonMSVC,MinGW文件夾,分別包含用cl和g++編譯兩個(gè)任務(wù)以及存放相關(guān)文件, 主要參數(shù)是args編譯選項(xiàng):
    tasks.json
{
    "tasks": [
        {
            "type": "shell",
            "label": "cl.exe build",
            "command": "cl.exe",
            "args": [
                //頭文件路徑
                "/I'D:\\Programs\\Microsoft Visual Studio\\2019\\Community\\VC\\Tools\\MSVC\\14.24.28314\\include'",
                "/I'C:\\Program Files (x86)\\Windows Kits\\10\\Include\\10.0.18362.0\\shared'",
                "/I'C:\\Program Files (x86)\\Windows Kits\\10\\Include\\10.0.18362.0\\ucrt'",
                "/I'C:\\Program Files (x86)\\Windows Kits\\10\\Include\\10.0.18362.0\\um'",
                "${file}",
                "/Zi", //生成調(diào)試信息
                "/EHsc", //打開異常處理
                "/Fo:${fileDirname}\\MSVC\\${fileBasenameNoExtension}.obj", //目標(biāo)文件
                "/Fe:${fileDirname}\\MSVC\\${fileBasenameNoExtension}.exe", //可執(zhí)行文件
                "/link", //鏈接標(biāo)志
                //庫(kù)文件路徑
                "/libpath:'D:\\Programs\\Microsoft Visual Studio\\2019\\Community\\VC\\Tools\\MSVC\\14.24.28314\\lib\\x64'",
                "/libpath:'C:\\Program Files (x86)\\Windows Kits\\10\\Lib\\10.0.18362.0\\ucrt\\x64'",
                "/libpath:'C:\\Program Files (x86)\\Windows Kits\\10\\Lib\\10.0.18362.0\\um\\x64'"
            ],
            "group": {
                "kind": "build",
                "isDefault": true
            },
            "presentation": {
                "reveal": "always"
            },
            "problemMatcher": "$msCompile"
        },
        {
            "type": "shell",
            "label": "g++.exe build",
            "command": "g++.exe",
            "args": [
                "-g",
                "${file}",
                "-o",
                "${fileDirname}\\MinGW\\${fileBasenameNoExtension}.exe",
                //頭文件路徑
                "-I D:\\Programs\\mingw-w64\\x86_64-8.1.0-posix-seh-rt_v6-rev0\\mingw64\\x86_64-w64-mingw32\\include",
                //庫(kù)文件路徑
                "-L D:\\Programs\\mingw-w64\\x86_64-8.1.0-posix-seh-rt_v6-rev0\\mingw64\\x86_64-w64-mingw32\\lib"
            ],
            "options": {
                "cwd": "D:\\Programs\\mingw-w64\\x86_64-8.1.0-posix-seh-rt_v6-rev0\\mingw64\\bin"
            },
            "problemMatcher": [
                "$gcc"
            ]
        }
    ],

    "version": "2.0.0"
}
  • 創(chuàng)建完成以后可以先單獨(dú)測(cè)試編譯, 置前當(dāng)前需要編譯的源文件(這個(gè)即為${file}), 然后點(diǎn)擊Terminal => Run Task,按照標(biāo)簽分別測(cè)試兩個(gè)compiler:
build.PNG
  • 編譯沒(méi)問(wèn)題以后,下面就是配置啟動(dòng)和Debugger, 在.vscode中創(chuàng)建一個(gè)名為launch.json的文件, 主要是通過(guò)type來(lái)指定debugger和preLaunchTask將之前的兩個(gè)編譯tasks作為前置任務(wù)先執(zhí)行(注意這里可以將externalConsole設(shè)置為false來(lái)創(chuàng)建一個(gè)console的子進(jìn)程避免打開額外的進(jìn)程窗口):

launch.json

{
    "version": "0.2.0",
    
    "configurations": [
        //cdb
        {
            "name": "cl.exe build and debug",
            "type": "cppvsdbg",
            "request": "launch",
            "program": "MSVC\\${fileBasenameNoExtension}.exe",
            "args": [],
            "stopAtEntry": false,
            "cwd": "${workspaceFolder}",
            "environment": [],
            "externalConsole": false, //子進(jìn)程console
            "preLaunchTask": "cl.exe build",
            "logging": {
                "moduleLoad": false
            },
        },
        //gdb
        {
            "name": "g++.exe build and debug active file",
            "type": "cppdbg",
            "request": "launch",
            "program": "${fileDirname}\\MinGW\\${fileBasenameNoExtension}.exe",
            "args": [],
            "stopAtEntry": false,
            "cwd": "${workspaceFolder}",
            "environment": [],
            "externalConsole": false,
            "MIMode": "gdb",
            "miDebuggerPath": "gdb.exe",
            "setupCommands": [
                {
                    "description": "為 gdb 啟用整齊打印",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ],
            "preLaunchTask": "g++.exe build"
        }
    ]
}
  • 啟動(dòng)方法是選中錨點(diǎn)文件${file}, 例如這里的test.cpp, 點(diǎn)擊左側(cè)的Run圖標(biāo),然后在左上角選擇相應(yīng)name的runner,cdb可以在下方的debug console查看信息,gdb直接在terminal查看:
    runner.png

(后記:對(duì)于多源文件和方便性可以使用CMake,參考我的這一篇VS Code C++ CMake工具編譯,本文可以幫助復(fù)習(xí)一下編譯工具相關(guān)的知識(shí))

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末潜的,一起剝皮案震驚了整個(gè)濱河市按傅,隨后出現(xiàn)的幾起案子停做,更是在濱河造成了極大的恐慌,老刑警劉巖泳梆,帶你破解...
    沈念sama閱讀 221,198評(píng)論 6 514
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異榜掌,居然都是意外死亡优妙,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,334評(píng)論 3 398
  • 文/潘曉璐 我一進(jìn)店門憎账,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)套硼,“玉大人,你說(shuō)我怎么就攤上這事胞皱⌒耙猓” “怎么了?”我有些...
    開封第一講書人閱讀 167,643評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵反砌,是天一觀的道長(zhǎng)雾鬼。 經(jīng)常有香客問(wèn)我,道長(zhǎng)宴树,這世上最難降的妖魔是什么策菜? 我笑而不...
    開封第一講書人閱讀 59,495評(píng)論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮酒贬,結(jié)果婚禮上又憨,老公的妹妹穿的比我還像新娘。我一直安慰自己锭吨,他們只是感情好竟块,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,502評(píng)論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著耐齐,像睡著了一般浪秘。 火紅的嫁衣襯著肌膚如雪蒋情。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,156評(píng)論 1 308
  • 那天耸携,我揣著相機(jī)與錄音棵癣,去河邊找鬼。 笑死夺衍,一個(gè)胖子當(dāng)著我的面吹牛狈谊,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播沟沙,決...
    沈念sama閱讀 40,743評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼河劝,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了矛紫?” 一聲冷哼從身側(cè)響起赎瞎,我...
    開封第一講書人閱讀 39,659評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎颊咬,沒(méi)想到半個(gè)月后务甥,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,200評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡喳篇,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,282評(píng)論 3 340
  • 正文 我和宋清朗相戀三年敞临,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片麸澜。...
    茶點(diǎn)故事閱讀 40,424評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡挺尿,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出炊邦,到底是詐尸還是另有隱情编矾,我是刑警寧澤,帶...
    沈念sama閱讀 36,107評(píng)論 5 349
  • 正文 年R本政府宣布铣耘,位于F島的核電站洽沟,受9級(jí)特大地震影響以故,放射性物質(zhì)發(fā)生泄漏蜗细。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,789評(píng)論 3 333
  • 文/蒙蒙 一怒详、第九天 我趴在偏房一處隱蔽的房頂上張望炉媒。 院中可真熱鬧,春花似錦昆烁、人聲如沸吊骤。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,264評(píng)論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)白粉。三九已至传泊,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間鸭巴,已是汗流浹背眷细。 一陣腳步聲響...
    開封第一講書人閱讀 33,390評(píng)論 1 271
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留鹃祖,地道東北人溪椎。 一個(gè)月前我還...
    沈念sama閱讀 48,798評(píng)論 3 376
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像恬口,于是被迫代替她去往敵國(guó)和親校读。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,435評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容