windows7 vscode c/c++开发编译环境配置(图文)
Visual Studio 太大了,不想装也不想用,电脑上有已经安装的VSCode,不管是开发网页前端,还是java,用着感觉都不错,所以还是试试用它来开发 c/c++怎么样。应该说整体感觉还是不错的。
使用VSCode开发c/c++代码,首先就是解决编译环境的问题,网上搜索了一下,有的建议使用TDM-GCC,下面官网建议使用MSYS2,我是使用mingw/64,cygwin是比较老的了,虽然它大而全。
mingw/64下载地址:https://sourceforge.net/projects/mingw-w64/files/mingw-w64/mingw-w64-release/
MinGW-W64在线安装程序:
我是使用在线安装程序安装的,离线的下载下来是很小,但是解压了发现是需要编译安装的。
mingw/64的安装参考:MinGW-w64安装教程——著名C/C++编译器GCC的Windows版本
其中有一个关于异常处理的选项我选择“seh”,参考:mingw64安装 exception的三个选项 dwarf sjlj seh
以下内容来自VSCode官网,机翻的有点问题,建议看官网文章:https://code.visualstudio.com/docs/cpp/config-mingw
有很多介绍如何配置的文章,视频,但是整体感觉还是官网的最好。
将 GCC 与 MinGW 一起使用
在本教程中,您将 Visual Studio Code 配置为使用来自mingw-w64的 GCC C++ 编译器 (g++) 和 GDB 调试器来创建在 Windows 上运行的程序。
配置完 VS Code 后,你将在 VS Code 中编译和调试一个简单的 Hello World 程序。本教程不会教您有关 GCC、GDB、Mingw-w64 或 C++ 语言的知识。对于这些主题,网上有很多很好的资源。
如果您有任何问题,请随时在VS Code 文档存储库中为本教程提交问题。
先决条件#
要成功完成本教程,您必须执行以下步骤:
为 VS Code安装C/C++ 扩展。您可以通过在扩展视图 ( Ctrl+Shift+X )中搜索“c++”来安装 C/C++ 扩展。
通过MSYS2获取最新版本的 Mingw-w64 ,它提供 GCC、Mingw-w64 和其他有用的 C++ 工具和库的最新本机构建。 单击此处下载 MSYS2 安装程序。然后按照MSYS2 网站上的说明安装 Mingw-w64。
使用以下步骤将 Mingw-w64
bin
文件夹的路径添加到 Windows环境变量:PATH
在 Windows 搜索栏中,键入“设置”以打开您的 Windows 设置。
为您的帐户搜索编辑环境变量。
选择
Path
变量,然后选择Edit。选择新建并将 Mingw-w64 目标文件夹路径添加到系统路径。具体路径取决于您安装的 Mingw-w64 版本以及安装位置。如果您使用上述设置安装 Mingw-w64,则将其添加到路径:
C:\msys64\mingw64\bin
.选择确定以保存更新的 PATH。您将需要重新打开任何控制台窗口以使新的 PATH 位置可用。
检查您的 MinGW 安装#
要检查您的 Mingw-w64 工具是否已正确安装且可用,请打开一个新的命令提示符并键入:
g++ --versiongdb --version
如果您没有看到预期的输出或者g++
不是gdb
可识别的命令,请确保您的 PATH 条目与编译器所在的 Mingw-w64 二进制位置匹配。如果该 PATH 条目中不存在编译器,请确保按照MSYS2 网站上的说明安装 Mingw-w64。
创建你好世界#
在 Windows 命令提示符下,创建一个名为的空文件夹projects
,您可以在其中放置所有 VS Code 项目。然后创建一个名为 的子文件夹helloworld
,导航到它,并通过输入以下命令在该文件夹中打开 VS Code:
mkdir projectscd projectsmkdir helloworldcd helloworldcode .
代码 。” 命令在当前工作文件夹中打开 VS Code,该文件夹成为您的“工作区”。在学习本教程时,您将看到.vscode
在工作区的一个文件夹中创建了三个文件:
tasks.json
(构建说明)launch.json
(调试器设置)c_cpp_properties.json
(编译器路径和 IntelliSense 设置)
添加源代码文件#
在文件资源管理器标题栏中,选择新建文件按钮并将文件命名为helloworld.cpp
。
添加hello world源代码#
现在粘贴此源代码:
#include <iostream>#include <vector>#include <string>using namespace std;int main(){ vector<string> msg {"Hello", "C++", "World", "from", "VS Code", "and the C++ extension!"}; for (const string& word : msg) { cout << word << " "; } cout << endl;}
现在按Ctrl+S保存文件。请注意您刚刚添加的文件是如何出现在VS Code 侧边栏中的文件资源管理器视图 ( Ctrl+Shift+E ) 中的:
您还可以通过选中主文件菜单中的自动保存来启用自动保存以自动保存文件更改。
最左侧的活动栏让您可以打开不同的视图,例如搜索、源代码管理和运行。您将在本教程的后面部分查看运行视图。您可以在 VS Code用户界面文档中找到有关其他视图的更多信息。
注意:当您保存或打开 C++ 文件时,您可能会看到来自 C/C++ 扩展的通知,告知您有 Insiders 版本的可用性,它允许您测试新功能和修复。
X
您可以通过选择(清除通知)忽略此通知。
探索 IntelliSense #
在您的新helloworld.cpp
文件中,将鼠标悬停在vector
或string
查看类型信息。声明msg
变量后,开始键入msg.
,就像调用成员函数时一样。您应该立即看到一个显示所有成员函数的完成列表,以及一个显示msg
对象类型信息的窗口:
可以按Tab键插入选中的成员;然后,当您添加左括号时,您将看到有关该函数所需的任何参数的信息。
构建 helloworld.cpp #
接下来,您将创建一个tasks.json
文件来告诉 VS Code 如何构建(编译)程序。此任务将调用 g++ 编译器以基于源代码创建可执行文件。
从主菜单中,选择终端>配置默认构建任务。在下拉列表中,将显示一个任务下拉列表,其中列出了 C++ 编译器的各种预定义构建任务。选择g++.exe build active file,它将构建当前在编辑器中显示(活动)的文件。
这将在文件夹中创建一个tasks.json
文件.vscode
并在编辑器中打开它。
您的新tasks.json
文件应该类似于下面的 JSON:
{ "tasks": [ { "type": "cppbuild", "label": "C/C++: g++.exe build active file", "command": "C:/msys64/mingw64/bin/g++.exe", "args": ["-g", "${file}", "-o", "${fileDirname}\\${fileBasenameNoExtension}.exe"], "options": { "cwd": "${fileDirname}" }, "problemMatcher": ["$gcc"], "group": { "kind": "build", "isDefault": true }, "detail": "compiler: C:/msys64/mingw64/bin/g++.exe" } ], "version": "2.0.0"}
command
设置指定要运行的程序;在这种情况下是 g++。该args
数组指定将传递给 g++ 的命令行参数。这些参数必须按照编译器预期的顺序指定。该任务告诉 g++ 获取活动文件 ( ${file}
),对其进行编译,并在当前目录 ( ${fileDirname}
) 中创建一个与活动文件同名但.exe
扩展名为 ( ${fileBasenameNoExtension}.exe
)的可执行文件,这helloworld.exe
就是我们的示例。
注意:您可以在变量参考中了解有关
tasks.json
变量的更多信息。
该label
值是您将在任务列表中看到的;你可以随意命名它。
对象中的"isDefault": true
值指定当您按Ctrl+Shift+Bgroup
时将运行此任务。此属性仅为方便起见;如果将其设置为 false,您仍然可以从 Terminal 菜单中使用Tasks: Run Build Task运行它。
运行构建#
回到
helloworld.cpp
. 您的任务构建活动文件并且您想要构建helloworld.cpp
.要运行中定义的构建任务
tasks.json
,请按Ctrl+Shift+B或从终端主菜单中选择运行构建任务。当任务开始时,您应该会看到集成终端面板出现在源代码编辑器下方。任务完成后,终端会显示编译器的输出,指示构建是成功还是失败。对于成功的 g++ 构建,输出如下所示:
使用+按钮创建一个新终端,您将拥有一个以
helloworld
文件夹作为工作目录的新终端。运行dir
,您现在应该会看到可执行文件helloworld.exe
。您可以
helloworld
通过键入helloworld.exe
(或者.\helloworld.exe
如果您使用 PowerShell 终端)在终端中运行。
注意:您最初可能需要按几次Enter才能在终端中看到 PowerShell 提示符。此问题应在 Windows 的未来版本中得到修复。
修改tasks.json #
您可以tasks.json
使用类似的参数"${workspaceFolder}\\*.cpp"
而不是${file}
. 这将构建.cpp
您当前文件夹中的所有文件。您还可以通过替换"${fileDirname}\\${fileBasenameNoExtension}.exe"
为硬编码文件名(例如"${workspaceFolder}\\myProgram.exe"
)来修改输出文件名。
调试 helloworld.cpp #
接下来,您将创建一个launch.json
文件来配置 VS Code,以便在您按F5调试程序时启动 GDB 调试器。
从主菜单中,选择Run > Add Configuration...,然后选择C++ (GDB/LLDB)。
然后,您将看到各种预定义调试配置的下拉列表。选择g++.exe 构建和调试活动文件。
VS Code 创建一个launch.json
文件,在编辑器中打开它,然后构建并运行“helloworld”。
{ "version": "0.2.0", "configurations": [ { "name": "g++.exe - Build and debug active file", "type": "cppdbg", "request": "launch", "program": "${fileDirname}\\${fileBasenameNoExtension}.exe", "args": [], "stopAtEntry": false, "cwd": "${fileDirname}", "environment": [], "externalConsole": false, "MIMode": "gdb", "miDebuggerPath": "C:\\msys64\\mingw64\\bin\\gdb.exe", "setupCommands": [ { "description": "Enable pretty-printing for gdb", "text": "-enable-pretty-printing", "ignoreFailures": true } ], "preLaunchTask": "C/C++: g++.exe build active file" } ]}
该program
设置指定要调试的程序。在这里,它被设置为活动文件夹${fileDirname}
和活动文件名,.exe
扩展名${fileBasenameNoExtension}.exe
是helloworld.cpp
活动文件helloworld.exe
。
默认情况下,C++ 扩展不会向您的源代码添加任何断点,并且该stopAtEntry
值设置为false
.
stopAtEntry
将值更改为true
以使调试器main
在您开始调试时停止该方法。
注意:该
preLaunchTask
设置用于指定要在启动前执行的任务。确保它与tasks.json
文件label
设置一致。
开始调试会话#
返回
helloworld.cpp
,使其成为活动文件。按F5或从主菜单中选择Run > Start Debugging。在开始逐步浏览源代码之前,让我们花点时间注意用户界面的一些变化:
集成终端出现在源代码编辑器的底部。在“调试输出”选项卡中,您会看到指示调试器已启动并正在运行的输出。
编辑器突出显示方法中的第一条语句
main
。这是 C++ 扩展自动为您设置的断点:左侧的运行视图显示调试信息。您将在本教程后面看到一个示例。
在代码编辑器的顶部,会出现一个调试控制面板。您可以通过抓住左侧的点来在屏幕上移动它。
单步执行代码#
现在您已准备好开始单步执行代码。
单击或按调试控制面板中的“跳过”图标。
这会将程序执行推进到 for 循环的第一行,并跳过创建和初始化变量时调用的
vector
和string
类中的所有内部函数调用。msg
注意左侧变量窗口的变化。在这种情况下,错误是意料之中的,因为尽管循环的变量名现在对调试器可见,但语句尚未执行,因此此时没有可读取的内容。但是,的内容
msg
是可见的,因为该语句已完成。再次按Step over以前进到该程序中的下一条语句(跳过所有为初始化循环而执行的内部代码)。现在,“变量”窗口显示有关循环变量的信息。
再次按Step over以执行
cout
语句。(请注意,从 2019 年 3 月的版本开始,C++ 扩展在循环退出之前不会将任何输出打印到调试控制台。)如果您愿意,可以一直按Step over,直到向量中的所有单词都打印到控制台。但是,如果您好奇,请尝试按下Step Into按钮来逐步浏览 C++ 标准库中的源代码!
要返回您自己的代码,一种方法是按住Step over。另一种方法是通过切换到
helloworld.cpp
代码编辑器中的选项卡在代码中设置断点,将插入点放在cout
循环内语句的某个位置,然后按F9。左侧的装订线中出现一个红点,表示该行已设置断点。然后按F5从标准库头中的当前行开始执行。执行将中断
cout
。如果您愿意,可以再次按F9来关闭断点。循环完成后,您可以在集成终端中看到输出,以及 GDB 输出的一些其他诊断信息。
设置手表#
有时您可能希望在程序执行时跟踪变量的值。您可以通过在变量上设置监视来做到这一点。
将插入点放在循环内。在Watch窗口中,单击加号并在文本框中输入
word
,这是循环变量的名称。现在,在您逐步完成循环时查看 Watch 窗口。通过在循环之前添加以下语句来添加另一个手表:
int i = 0;
. 然后,在循环内,添加以下语句:++i;
.i
现在像上一步一样添加一个手表。要在断点处暂停执行时快速查看任何变量的值,您可以将鼠标指针悬停在该变量上。
C/C++ 配置#
如果您想更好地控制 C/C++ 扩展,您可以创建一个c_cpp_properties.json
文件,该文件将允许您更改设置,例如编译器的路径、包含路径、C++ 标准(默认为 C++17)等等。
您可以通过运行命令C/C++: Edit Configurations (UI) from the Command Palette ( Ctrl+Shift+P ) 来查看 C/C++ 配置 UI。
这将打开C/C++ 配置页面。当您在此处进行更改时,VS Code 会将它们写入文件夹中调用c_cpp_properties.json
的.vscode
文件中。
在这里,我们将配置名称更改为GCC,将Compiler 路径下拉菜单设置为 g++ 编译器,并设置IntelliSense 模式以匹配编译器 ( gcc-x64 )
Visual Studio Code 将这些设置放在.vscode\c_cpp_properties.json
. 如果您直接打开该文件,它应该如下所示:
{ "configurations": [ { "name": "GCC", "includePath": ["${workspaceFolder}/**"], "defines": ["_DEBUG", "UNICODE", "_UNICODE"], "windowsSdkVersion": "10.0.18362.0", "compilerPath": "C:/msys64/mingw64/bin/g++.exe", "cStandard": "c17", "cppStandard": "c++17", "intelliSenseMode": "windows-gcc-x64" } ], "version": 4}
如果您的程序包含不在工作区或标准库路径中的头文件,您只需添加到包含路径数组设置。
编译器路径#
该扩展使用该compilerPath
设置来推断 C++ 标准库头文件的路径。当扩展知道在哪里可以找到这些文件时,它可以提供智能完成和转到定义导航等功能。
C/C++ 扩展尝试compilerPath
根据它在您的系统上找到的内容填充默认编译器位置。该扩展在几个常见的编译器位置中查找。
compilerPath
搜索顺序为:
首先检查 Microsoft Visual C++ 编译器
然后在 Windows Subsystem for Linux (WSL) 上寻找 g++
然后为 Mingw-w64 使用 g++。
如果安装了 Visual Studio 或 WSL,则可能需要进行更改compilerPath
以匹配项目的首选编译器。例如,如果您使用 i686 架构、Win32 线程和 sjlj 异常处理安装选项安装 Mingw-w64 版本 8.1.0,则路径将如下所示C:\Program Files (x86)\mingw-w64\i686-8.1.0-win32-sjlj-rt_v6-rev0\mingw64\bin\g++.exe
:
故障排除#
安装了 MSYS2,但仍然找不到 g++ 和 gdb #
您必须按照MSYS2 网站上的步骤并使用 MSYS CLI 安装包含这些工具的 Mingw-w64。
下一步#
探索VS Code 用户指南。
查看C++ 扩展概述。
创建一个新的工作区,将您的
.vscode
JSON 文件复制到其中,为新的工作区路径、程序名称等调整必要的设置,然后开始编码!
本文由 微wx笑 创作,采用 署名-非商业性使用-相同方式共享 4.0 许可协议,转载请附上原文出处链接及本声明。
原文链接:https://www.ivu4e.cn/toolbox/code/2022-01-21/951.html
上一篇:Maven 简介