windows下搭建c++开发环境
1.依赖包准备:
1. 下载vscode & 下载mingw
2. 获取依赖库路径:cmd---> gcc -v -x c++ -E - |C++头文件
gcc -v -x c -E - |C头文件
3. 安装c/c++相关扩展包:
* C/C++ Extension Pack |扩展包集-省事直选
* C/C++ |必装
* C++ Intellisense |代码提示与高亮
* CMake |工程编译
* GitLens — Git supercharged |仓库管理
4. 安装其他扩展包
* Chinese (Simplified) Language Pack for Visual Studio Code |中文简体
* Settings Sync |配置同步
* TabOut |tab跳出括号
2.配置说明:
1. c_cpp_properties.json |编译环境
{
"configurations": [
{
"name":"MinGW",
"compilerPath":"C:\\MinGW\\bin\\g++.exe",
"includePath": [
"${workspaceFolder}"
],
"defines": [],
"browse": {
"path": [
"${workspaceFolder}"
],
"limitSymbolsToIncludedHeaders":true,
"databaseFilename":""
},
"cStandard":"c11",
"cppStandard":"c++17"
}
],
"version": 4
}
2. launch.json |调试配置
{
"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":"${workspaceFolder}",// 调试程序时的工作目录
"environment": [],// (环境变量?)
"externalConsole":true,// 调试时是否显示控制台窗口,一般设置为true显示控制台
"internalConsoleOptions":"neverOpen",// 如果不设为neverOpen,调试时会跳到“调试控制台”选项卡,你应该不需要对gdb手动输命令吧?
"MIMode":"gdb",// 指定连接的调试器,可以为gdb或lldb。但目前lldb在windows下没有预编译好的版本。
"miDebuggerPath":"gdb.exe",// 调试器路径,Windows下后缀不能省略,Linux下则去掉
"preLaunchTask":"build" // 调试会话开始前执行的任务,一般为编译程序。与tasks.json的label相对应
}
]
}
3. tasks.json |编译配置
{
"version":"2.0.0",
"tasks": [
{
"label":"build",// 任务名称,与launch.json的preLaunchTask相对应
"command":"g++",// 要使用的编译器
"args": [
"-g",// 生成和调试有关的信息
"${file}",
"-o",// 指定输出文件名,不加该参数则默认输出a.exe,Linux下默认a.out
"${fileDirname}\\${fileBasenameNoExtension}.exe",
//"${fileDirname}/${fileBasenameNoExtension}.exe",
],// 编译命令参数
"type":"shell",// 可以为shell或process,前者相当于先打开shell再输入命令,后者是直接运行命令
"group": {
"kind":"build",
"isDefault":true // 设为false可做到一个tasks.json配置多个编译指令,需要自己修改本文件,我这里不多提
},
"problemMatcher":{
"owner":"$gcc",
"fileLocation":"absolute",
"pattern":[
{
"regexp":"^(.*):(\\d+):(\\d+):\\s+(warning|error):\\s+(.*)$",
"file": 1,
"line": 2,
"column": 3,
//"location": 2,
"message": 5
}
]
}
}
]
}
4.默认变量
${workspaceFolder} :表示当前workspace文件夹路径,也即/home/Coding/Test
${workspaceRootFolderName}:表示workspace的文件夹名,也即Test
${workspaceFolderBasename} - VS Code中打开的文件夹名称,不带任何斜杠(/)
${file}:文件自身的绝对路径,也即/home/Coding/Test/.vscode/tasks.json
${relativeFile}:文件在workspace中的路径,也即.vscode/tasks.json
${relativeFileDirname} - 当前打开文件的目录名(相对于workspaceFolder)
${fileBasename}:当前文件的文件名,tasks.json
${fileBasenameNoExtension}:当前文件的文件名,不带后缀,也即tasks
${fileDirname}:文件所在的文件夹路径,也即/home/Coding/Test/.vscode
${fileExtname}:当前文件的后缀,也即.json
${cwd} - 启动时任务运行程序的当前工作目录
${lineNumber}:当前文件光标所在的行号
${selectedText} - 活动文件中当前选定的文本
${execPath} - VS Code可执行文件的路径
${defaultBuildTask} - 默认构建任务的名称
${env:PATH}:系统中的环境变量
说明:
c++的debug过程是这样的,首先vscode调用launch.json, launch.json根据"preLaunchTask": “gcc build active file”, 的名称调用名为"gcc build active file" 的task.json, task.json中可以有多个task,根据tasks中的label名调用对应的任务。task主要负责进行编译成可执行文件。