第八章 vscode配置c/c++開發(fā)環(huán)境

目錄

第一章 初次接觸vscode
第二章 vscode快捷鍵的使用
第三章 vscode的界面配置
第四章 vscode作為Markdown編輯器
第五章 vscode進(jìn)行g(shù)it管理
第六章 vscode的遷移
第七章 vscode配置go語言開發(fā)環(huán)境
第八章 vscode配置c/c++開發(fā)環(huán)境

前言

平時(shí)工作用到的是c編程, 當(dāng)都是在linux下編譯, 在windows下編譯的情況很少, 但是也是有的, 比如我們做的windows下的分析工具, 也是用c語言寫的, 需要在windows下編譯, 最早使用的是VC++ 6.0, 軟件經(jīng)典但很老久, 一些功能也不是很方便, 后來換了code block, 挺不錯(cuò)的, 這不最近習(xí)慣了vscode, 就想著看是否可以用vscode進(jìn)行windows下的c開發(fā), 在上網(wǎng)搜索一番后開始了自己的配置.

配置過程

  1. 因?yàn)槭莿傞_始學(xué)習(xí)配置, 為了簡便, 就自己新建一個(gè)簡單點(diǎn)的c工程, 以免到時(shí)候有錯(cuò)誤都不知道是代碼本身的問題還是配置的問題.
  2. 簡單工程能夠編譯的話說明配置上是可行的, 然后再進(jìn)行復(fù)雜工程的編譯.
  3. 還是以經(jīng)典的'helloworld'開始, 首先自己創(chuàng)建一個(gè)helloworld目錄, 然后新建一個(gè)helloworld.c文件, 敲入以下代碼
#include <stdio.h>
int main()
{
    printf("hello world.\n");
}
  1. 到這里一個(gè)helloworld的工程就建好了, 后面就看怎么編譯了, 我們把helloworld.c編譯成helloworld.exe來運(yùn)行.
  2. 說一下要用到的工具. c/c++插件, 可以在插件管理中搜索安裝; mingw64(注意安裝路徑不要有空格), 這是編譯調(diào)試工具(至于mingw64, mingw, sygwin的選擇和區(qū)別, 可以參考這里)., 注意mingw64裝好之后要配置環(huán)境變量哈, 安裝配置方法網(wǎng)上很多, 這里提供一處做參考(https://www.cnblogs.com/bpf-1024/p/11597000.html).
  3. 在開始編譯之前, 我們先來了解一點(diǎn)東西, 那就是vscode編譯時(shí)要用到的兩個(gè)文件'launch.json'和'task.json', 在官方說明里, 還有一個(gè)'c_cpp_properties.json'文件, 這里說一下它們各自的作用.

tasks.json (build instructions)
這個(gè)文件定義了編譯的方法, 比如用哪個(gè)編譯器, 編譯時(shí)候的參數(shù)是啥, 目標(biāo)文件等.
launch.json (debugger settings)
這是調(diào)試的配置, 在vscode里F5可以進(jìn)行調(diào)試, 這里面指明用哪個(gè)調(diào)試器進(jìn)行調(diào)試, 調(diào)試的是哪個(gè)程序, 也就是運(yùn)行哪個(gè)task(和上面的task對應(yīng))
c_cpp_properties.json (compiler path and IntelliSense settings)
看官方說明這是配置編譯器路徑的, 但是在task.json中command參數(shù)就可以指定路徑啊, 是不是之前沒有command這個(gè)參數(shù), 現(xiàn)在有這個(gè)參數(shù)了就用不到c_cpp_properties.json這個(gè)文件了呢(參考這里推測的). 沒有細(xì)究這個(gè)問題, 反正我目前是沒有用到這個(gè)文件.

  1. 好了, 了解了各個(gè)文件的作用之后, 現(xiàn)在就要開始配置這些文件了. 我們先看看編譯過程是否可以, 先不調(diào)試. 也就是只配置task.json, 先不管launch.json.
    依次選擇菜單"終端->配置默認(rèn)生成任務(wù)", 然后選擇"g++.exe build active file"生成一個(gè)默認(rèn)的task.json文件, 可以發(fā)現(xiàn)它是在.vscode目錄下的. 我們配置一下這個(gè)文件, 見如下注釋:
{
    // 有關(guān) tasks.json 格式的文檔,請參見
    // https://go.microsoft.com/fwlink/?LinkId=733558
    "version": "2.0.0",
    "tasks": [
        {
            "type": "shell",
            "label": "mybuild",  #給你的任務(wù)起一個(gè)名字
            "command": "D:\\mingw64\\bin\\g++.exe",  #這里指定你的編譯器
            # args是一些編譯參數(shù)的配置
            "args": [   
                "-g",
                "${file}",
                "-o",
                "${fileDirname}\\${fileBasenameNoExtension}.exe"
            ],
            "options": {
                "cwd": "D:\\mingw64\\bin"  #和上面編譯器路徑對應(yīng)
            },
            "problemMatcher": [
                "$gcc"
            ],
            "group": {
                "kind": "build",
                "isDefault": true
            }
        }
    ]
}

了解一下官方的說明:

The command setting specifies the program to run; in this case that is g++. The args array specifies the command-line arguments that will be passed to g++. These arguments must be specified in the order expected by the compiler. This task tells g++ to take the active file ({file}), compile it, and create an executable file in the current directory ({fileDirname}) with the same name as the active file but with the .exe extension (${fileBasenameNoExtension}.exe), resulting in helloworld.exe for our example.

  1. task.json配置好了, 我們就可以運(yùn)行它了, 選擇菜單"終端->運(yùn)行任務(wù)", 根據(jù)配置, vscode會調(diào)用你指定的g++編譯器, 然后根據(jù)你配置的編譯參數(shù)對helloworld.c進(jìn)行編譯, 生成你指定的目標(biāo)文件helloworld.exe.
    輸出信息如下:


你可以使用" .\helloworld.exe"來運(yùn)行程序, 此時(shí)會打印"hello world"字符串.

  1. 如果要調(diào)試程序, 需要告訴vscode用哪個(gè)工具來調(diào)試, 這是就需要配置launch.json了, 按F5或者"調(diào)試->啟動調(diào)試", 然后選擇"C++ (GDB/LLDB)"生成默認(rèn)的launch.json, 修改內(nèi)容如下:
{
    // 使用 IntelliSense 了解相關(guān)屬性。 
    // 懸停以查看現(xiàn)有屬性的描述。
    // 欲了解更多信息,請?jiān)L問: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "name": "(gdb) 啟動",
            "type": "cppdbg",
            "request": "launch",
            # 指定調(diào)試的程序, 就是task生成的目標(biāo)文件, 這里是helloworld.exe
            "program": "${fileDirname}\\${fileBasenameNoExtension}.exe",
            "args": [],
            "stopAtEntry": false,
            "cwd": "${workspaceFolder}",
            "environment": [],
            "externalConsole": false,   # 修改這里可以彈出調(diào)試窗口
            "MIMode": "gdb",
            # 指定你調(diào)試用的工具
            "miDebuggerPath": "D:\\mingw64\\bin\\gdb.exe",
            "setupCommands": [
                {
                    "description": "為 gdb 啟用整齊打印",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ]
        }
    ]
}

看官方說明還有這個(gè)參數(shù)"preLaunchTask": "g++.exe build active file", 但我的vscode生產(chǎn)的文件并沒有這個(gè)參數(shù), 這個(gè)參數(shù)的作用是說, 在執(zhí)行l(wèi)aunch之前需要執(zhí)行的任務(wù), 比如前面我們配置的task是編譯用的, 這里配置的launch是調(diào)試用的, 但通常我們調(diào)試時(shí)希望程序自動編譯新修改的代碼然后再開始調(diào)試, 這是就要用到"preLaunchTask"這個(gè)配置了, 把它配置成你前面task的名字, 那么在你每次調(diào)試前, 它都行先執(zhí)行前面的task然后再開始調(diào)試.

注意事項(xiàng)

  1. 看官方說明, 安裝mingw64的時(shí)候, 注意不要讓路徑中包含空格.
  2. 注意編譯和調(diào)試的時(shí)候, 你的默認(rèn)終端應(yīng)該是powershell等windows終端, 像我開始用的wsl就會報(bào)錯(cuò). 因?yàn)槲覀兪窃趙indows下工作的.
  3. 編譯或者調(diào)試要回到helloworld.c再進(jìn)行.

>>>>>>>>>>>>>>>>>>
補(bǔ)充:
這里補(bǔ)充一點(diǎn)關(guān)于code runner的說明. code runner是一款代碼調(diào)試插件, 和上面的功能差不多, 它其實(shí)也是有一些配置的, 要告訴他如何去編譯, 編譯時(shí)帶哪些參數(shù).
這個(gè)是在code-runner.executorMap這一項(xiàng)配置的, 可以在設(shè)置中搜索, 然后在setting.json中修改, 在插件的說明文檔中有舉例, 比如c語言的編譯方法為"c": "cd dir && gccfileName -o fileNameWithoutExt &&dir$fileNameWithoutExt", 這其實(shí)和上面的編譯很相似.
再就是對于中文, 默認(rèn)的編譯方式可能會顯示亂碼, 可以通過在gcc或g++后面添加-fexec-charset=GBK 參數(shù)來解決. 上面的方法也是.

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,117評論 6 537
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,860評論 3 423
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事?!?“怎么了?”我有些...
    開封第一講書人閱讀 177,128評論 0 381
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,291評論 1 315
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 72,025評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,421評論 1 324
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,477評論 3 444
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,642評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,177評論 1 335
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 40,970評論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 43,157評論 1 371
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,717評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,410評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,821評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,053評論 1 289
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 51,896評論 3 395
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 48,157評論 2 375