该文章翻译自官方教程(有部分修改)
这篇教程教你使用Mingw-w64中的GCC C++编译器(g++)和GDB调试器创建在windows上运行的程序。
配置完vscode,你将编译并调试一个简单的程序来熟悉vscode的界面。读完这篇教程你将能够自己创建并配置你的工作区、在vsocde的文档中进一步探索它的众多特性。不过本教程不会教你有关GCC、Mingw-w64或者c++的知识,因为这些东西在网上有很多可用的优秀资料。
如果你有任何问题,请随时在vscode文档仓库提问。
准备
要想配置成功必须先完成以下步骤:
- 安装vscode
- 安装vscode c++扩展
- 安装Mingw-w64(安装路径文件不能带有空格,且不要安装在默认路径
C:/Program Files/
下),本教程中默认它安装在C:\Mingw-w64
- 将Mingw-w64的
bin
文件添加到环境变量。
a.在windows设置中搜索编辑账户的环境变量
b.选中Path
,点击编辑
c.点击新建
,添加Mingw-w64的路径到环境变量中。实际路径取决于你安装的Mingw-w64版本。例如c:\mingw-w64\x86_64-8.1.0-win32-seh-rt_v6-rev0\mingw64\bin
d.点击确定
。已经打开的cmd窗口要重启才能让新路径生效。
创建一个工作区
-
在
cmd
中创建名为projects
的文件夹,用来放你的vscode工程。然后创建一个子文件夹,名为helloworld
。定位到这个文件夹,使用vscode打开。命令行如下:mkdir projects cd projects mkdir helloworld cd helloworld code .
code .
命令用于在vscode中打开当前文件夹,并将这个文件夹作为当前工作区。在编译调试代码之前,得先为vscode配置Mingw-w64。继续完成下方配置步骤后.vscode
子文件夹中将存在这些文件:-
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
。如果你的程序包含的头文件不在工作区或者标准头文件库的路径中,将这个头文件的路径添加到
Inlucde path
即可。
vscode将这些设置保存在.vscode/c_cpp_properties.json
。如果你直接打开它,你会看到类似如下内容(实际内容取决于你的Mingw-w64路径):{ "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++编译器根据源代码生成可执行文件。
- 菜单选择View > Command Palette,键入“task”,选择Tasks: Configure Default Build Task。在下拉列表中选择Create tasks.json file from template,然后选择Others。vscode将生成
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所需要的配置文件。
- 在命令面板中键入“launch”并下拉选择Debug:Open launch.json,然后选择GDB/LLDB。
-
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
子文件夹下,并修改配置中的源文件名和可执行文件名即可。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。