目錄
第一章 初次接觸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)搜索一番后開始了自己的配置.
配置過程
- 因?yàn)槭莿傞_始學(xué)習(xí)配置, 為了簡便, 就自己新建一個(gè)簡單點(diǎn)的c工程, 以免到時(shí)候有錯(cuò)誤都不知道是代碼本身的問題還是配置的問題.
- 簡單工程能夠編譯的話說明配置上是可行的, 然后再進(jìn)行復(fù)雜工程的編譯.
- 還是以經(jīng)典的'helloworld'開始, 首先自己創(chuàng)建一個(gè)helloworld目錄, 然后新建一個(gè)helloworld.c文件, 敲入以下代碼
#include <stdio.h>
int main()
{
printf("hello world.\n");
}
- 到這里一個(gè)helloworld的工程就建好了, 后面就看怎么編譯了, 我們把helloworld.c編譯成helloworld.exe來運(yùn)行.
- 說一下要用到的工具. c/c++插件, 可以在插件管理中搜索安裝; mingw64(注意安裝路徑不要有空格), 這是編譯調(diào)試工具(至于mingw64, mingw, sygwin的選擇和區(qū)別, 可以參考這里)., 注意mingw64裝好之后要配置環(huán)境變量哈, 安裝配置方法網(wǎng)上很多, 這里提供一處做參考(https://www.cnblogs.com/bpf-1024/p/11597000.html).
- 在開始編譯之前, 我們先來了解一點(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è)文件.
- 好了, 了解了各個(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 (
{fileDirname}) with the same name as the active file but with the .exe extension (${fileBasenameNoExtension}.exe), resulting in helloworld.exe for our example.
-
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"字符串.
- 如果要調(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)
- 看官方說明, 安裝mingw64的時(shí)候, 注意不要讓路徑中包含空格.
- 注意編譯和調(diào)試的時(shí)候, 你的默認(rèn)終端應(yīng)該是powershell等windows終端, 像我開始用的wsl就會報(bào)錯(cuò). 因?yàn)槲覀兪窃趙indows下工作的.
- 編譯或者調(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": "cdfileName -o
dir$fileNameWithoutExt", 這其實(shí)和上面的編譯很相似.
再就是對于中文, 默認(rèn)的編譯方式可能會顯示亂碼, 可以通過在gcc或g++后面添加-fexec-charset=GBK 參數(shù)來解決. 上面的方法也是.