该文章翻译自官方教程(有部分修改)php
这篇教程教你使用Mingw-w64中的GCC C++编译器(g++)和GDB调试器建立在windows上运行的程序。c++
配置完vscode,你将编译并调试一个简单的程序来熟悉vscode的界面。读完这篇教程你将可以本身建立并配置你的工做区、在vsocde的文档中进一步探索它的众多特性。不过本教程不会教你有关GCC、Mingw-w64或者c++的知识,由于这些东西在网上有不少可用的优秀资料。git
若是你有任何问题,请随时在vscode文档仓库提问。github
要想配置成功必须先完成如下步骤:shell
C:/Program Files/
下),本教程中默认它安装在C:\Mingw-w64
bin
文件添加到环境变量。编辑帐户的环境变量
Path
,点击编辑
新建
,添加Mingw-w64的路径到环境变量中。实际路径取决于你安装的Mingw-w64版本。例如c:\mingw-w64\x86_64-8.1.0-win32-seh-rt_v6-rev0\mingw64\bin
肯定
。已经打开的cmd窗口要重启才能让新路径生效。在cmd
中建立名为projects
的文件夹,用来放你的vscode工程。而后建立一个子文件夹,名为helloworld
。定位到这个文件夹,使用vscode打开。命令行以下:json
mkdir projects cd projects mkdir helloworld cd helloworld code .
code .
命令用于在vscode中打开当前文件夹,并将这个文件夹做为当前工做区。在编译调试代码以前,得先为vscode配置Mingw-w64。继续完成下方配置步骤后.vscode
子文件夹中将存在这些文件:windows
c_cpp_properties.json
(编译器路径和智能提示设置)tasks.json
(编译设置)launch.json
(调试设置)Ctrl+Shift+P
打开命令面板,它长这样:C/C++
而后在底下的列表中选择Edit Configurations (UI)
。vscode将会把你的更改写入到.vscode
下的c_cpp_properties.json
中。Complier path
设置。vscode会用系统上查找到的编译器路径来填写:优先查找MSVC编译器,其次查找WSL中的g++,最后查找Mingw-w64里的g++。若是你装了VisualStudio或者WSL,那你就得改一下Complier path
的路径了。假设你在C:\mingw-w64
下装了版本为8.1.0的Mingw-w64(使用Win32线程和结构化异常处理),那么修改路径为C:\mingw-w64\x86_64-8.1.0-win32-seh-rt_v6-rev0\mingw64\bin\g++.exe
。这个路径随着安装Mingw-w64时选择的选项的不一样而变化。Complier path
在配置文件中尤其重要。vscode插件经过它推断c++标准库的头文件路径,来为你在编写代码时提供许多有用的信息。这叫作IntelliSense(智能提示)
,在稍后的例子中你将见到它。函数
设置IntelliSense mode
为gcc-x64
。ui
若是你的程序包含的头文件不在工做区或者标准头文件库的路径中,将这个头文件的路径添加到Inlucde path
便可。
vscode将这些设置保存在.vscode/c_cpp_properties.json
。若是你直接打开它,你会看到相似以下内容(实际内容取决于你的Mingw-w64路径):spa
{ "configurations": [ { "name": "Win32", "includePath": ["${workspaceFolder}/**", "${vcpkgRoot}/x86-windows/include"], "defines": ["_DEBUG", "UNICODE", "_UNICODE"], "windowsSdkVersion": "10.0.17763.0", "compilerPath": "C:\\mingw-w64\\x86_64-8.1.0-win32-seh-rt_v6-rev0\\mingw64\\bin\\g++.exe", "cStandard": "c11", "cppStandard": "c++17", "intelliSenseMode": "${default}" } ], "version": 4 }
接下来,建立一个tasks.json
文件来告诉vsocde如何编译程序。这个task调用g++编译器根据源代码生成可执行文件。
tasks.json
并在编辑区打开。使用如下片断替换整个文件的内容:
{ "version": "2.0.0", "tasks": [ { "label": "build hello world", "type": "shell", "command": "g++", "args": ["-g", "-o", "helloworld", "helloworld.cpp"], "group": { "kind": "build", "isDefault": true } } ] }
command
设置声明了要运行的程序(这里是g++.exe),args
定义要传递给g++的命令参数,这些参数必须按照编译器指望的顺序来声明。label
的值做为任务名称会显示在vscode的命令面版中,任意值都可。group
下的isDefault
决定这个任务在按下Ctrl+Shift+B
时是否做为默认选项直接执行。这个属性只是为了方便一些,若是设为false,vscode会弹出下拉框让你选择一个任务来执行。
如今咱们配置按下F5时vscode启动GDB所须要的配置文件。
program
是你要调试的可执行文件路径,和你在tasks.json
中args
定义生成的可执行文件对应。调整miDebuggerPath
的值为Mingw-w64中的gdb.exe的路径。stopAtEntry
为true时,C++扩展会在main函数的第一行加上断点。设置为false则忽略这个断点。设置externalConsole
为true时,程序输出显示在下方的集成终端中。
launch.json
完整文件以下:
{ // Use IntelliSense to learn about possible attributes. // Hover to view descriptions of existing attributes. // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 "version": "0.2.0", "configurations": [ { "name": "(gdb) Launch", "type": "cppdbg", "request": "launch", "program": "${workspaceFolder}/helloworld.exe", "args": [], "stopAtEntry": true, "cwd": "${workspaceFolder}", "environment": [], "externalConsole": true, "MIMode": "gdb", "miDebuggerPath": "C:\\mingw-w64\\x86_64-8.1.0-win32-seh-rt_v6-rev0\\mingw64\\bin\\gdb.exe", "setupCommands": [ { "description": "Enable pretty-printing for gdb", "text": "-enable-pretty-printing", "ignoreFailures": true } ] } ] }
如今vscode配置Mingw-w64完成。配置仅对当前工做区有效,想要在另外一个工做区使用这些配置,把这些Json文件复制到另外一个工做区的.vscode
子文件夹下,并修改配置中的源文件名和可执行文件名便可。