编程工具您现在的位置是:首页 > 工具箱 > 编程工具

windows7 vscode c/c++开发编译环境配置(图文)

<a href='mailto:'>微wx笑</a>的头像微wx笑 2022-01-21编程工具 3 0关键字:   

Visual Studio 太大了,不想装也不想用,电脑上有已经安装的VSCode,不管是开发网页前端,还是java,用着感觉都不错,所以还是试试用它来开发 c/c++怎么样。应该说整体感觉还是不错的。

使用VSCode开发c/c++代码,首先就是解决编译环境的问题,网上搜索了一下,有的建议使用TDM-GCC,下面官网建议使用MSYS2,我是使用mingw/64,cygwin是比较老的了,虽然它大而全。zgR无知

mingw/64下载地址:https://sourceforge.net/projects/mingw-w64/files/mingw-w64/mingw-w64-release/ zgR无知

MinGW-W64在线安装程序:zgR无知

我是使用在线安装程序安装的,离线的下载下来是很小,但是解压了发现是需要编译安装的。zgR无知


zgR无知


zgR无知

mingw/64的安装参考:MinGW-w64安装教程——著名C/C++编译器GCC的Windows版本zgR无知

其中有一个关于异常处理的选项我选择“seh”,参考:mingw64安装 exception的三个选项 dwarf sjlj sehzgR无知

zgR无知


zgR无知


zgR无知

以下内容来自VSCode官网,机翻的有点问题,建议看官网文章:https://code.visualstudio.com/docs/cpp/config-mingw zgR无知


zgR无知

有很多介绍如何配置的文章,视频,但是整体感觉还是官网的最好。zgR无知


zgR无知

将 GCC 与 MinGW 一起使用

zgR无知

在本教程中,您将 Visual Studio Code 配置为使用来自mingw-w64的 GCC C++ 编译器 (g++) 和 GDB 调试器来创建在 Windows 上运行的程序。zgR无知

配置完 VS Code 后,你将在 VS Code 中编译和调试一个简单的 Hello World 程序。本教程不会教您有关 GCC、GDB、Mingw-w64 或 C++ 语言的知识。对于这些主题,网上有很多很好的资源。zgR无知

如果您有任何问题,请随时在VS Code 文档存储库中为本教程提交问题。zgR无知

先决条件#

要成功完成本教程,您必须执行以下步骤:zgR无知

  1. 安装Visual Studio 代码zgR无知

  2. 为 VS Code安装C/C++ 扩展您可以通过在扩展视图 ( Ctrl+Shift+X )中搜索“c++”来安装 C/C++ 扩展。zgR无知

    C/C++ 扩展zgR无知

  3. 通过MSYS2获取最新版本的 Mingw-w64 ,它提供 GCC、Mingw-w64 和其他有用的 C++ 工具和库的最新本机构建。 单击此处下载 MSYS2 安装程序。然后按照MSYS2 网站上的说明安装 Mingw-w64。zgR无知

  4. 使用以下步骤将 Mingw-w64bin文件夹的路径添加到 Windows环境变量:PATHzgR无知

    1. 在 Windows 搜索栏中,键入“设置”以打开您的 Windows 设置。zgR无知

    2. 为您的帐户搜索编辑环境变量zgR无知

    3. 选择Path变量,然后选择EditzgR无知

    4. 选择新建并将 Mingw-w64 目标文件夹路径添加到系统路径。具体路径取决于您安装的 Mingw-w64 版本以及安装位置。如果您使用上述设置安装 Mingw-w64,则将其添加到路径:C:\msys64\mingw64\bin.zgR无知

    5. 选择确定以保存更新的 PATH。您将需要重新打开任何控制台窗口以使新的 PATH 位置可用。zgR无知

检查您的 MinGW 安装#

要检查您的 Mingw-w64 工具是否已正确安装且可用,请打开一个的命令提示符并键入:zgR无知

g++ --versiongdb --version

如果您没有看到预期的输出或者g++不是gdb可识别的命令,请确保您的 PATH 条目与编译器所在的 Mingw-w64 二进制位置匹配。如果该 PATH 条目中不存在编译器,请确保按照MSYS2 网站上的说明安装 Mingw-w64。zgR无知

创建你好世界#

在 Windows 命令提示符下,创建一个名为的空文件夹projects,您可以在其中放置所有 VS Code 项目。然后创建一个名为 的子文件夹helloworld,导航到它,并通过输入以下命令在该文件夹中打开 VS Code:zgR无知

mkdir projectscd projectsmkdir helloworldcd helloworldcode .

代码 。” 命令在当前工作文件夹中打开 VS Code,该文件夹成为您的“工作区”。在学习本教程时,您将看到.vscode在工作区的一个文件夹中创建了三个文件:zgR无知

  • tasks.json (构建说明)zgR无知

  • launch.json (调试器设置)zgR无知

  • c_cpp_properties.json (编译器路径和 IntelliSense 设置)zgR无知

添加源代码文件#

在文件资源管理器标题栏中,选择新建文件按钮并将文件命名为helloworld.cppzgR无知

新建文件标题栏按钮zgR无知

添加hello world源代码#

现在粘贴此源代码:zgR无知

#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 ) 中的:zgR无知

文件管理器zgR无知

您还可以通过选中文件菜单中的自动保存来启用自动保存以自动保存文件更改。zgR无知

最左侧的活动栏让您可以打开不同的视图,例如搜索源代码管理运行您将在本教程的后面部分查看运行视图。您可以在 VS Code用户界面文档中找到有关其他视图的更多信息zgR无知

注意:当您保存或打开 C++ 文件时,您可能会看到来自 C/C++ 扩展的通知,告知您有 Insiders 版本的可用性,它允许您测试新功能和修复。X您可以通过选择(清除通知)忽略此通知zgR无知

探索 IntelliSense #

在您的新helloworld.cpp文件中,将鼠标悬停在vectorstring查看类型信息。声明msg变量后,开始键入msg.,就像调用成员函数时一样。您应该立即看到一个显示所有成员函数的完成列表,以及一个显示msg对象类型信息的窗口:zgR无知

语句完成智能感知zgR无知

可以按Tab键插入选中的成员;然后,当您添加左括号时,您将看到有关该函数所需的任何参数的信息。zgR无知

构建 helloworld.cpp #

接下来,您将创建一个tasks.json文件来告诉 VS Code 如何构建(编译)程序。此任务将调用 g++ 编译器以基于源代码创建可执行文件。zgR无知

从主菜单中,选择终端>配置默认构建任务在下拉列表中,将显示一个任务下拉列表,其中列出了 C++ 编译器的各种预定义构建任务。选择g++.exe build active file,它将构建当前在编辑器中显示(活动)的文件。zgR无知

任务 C++ 构建下拉菜单zgR无知

这将在文件夹中创建一个tasks.json文件.vscode并在编辑器中打开它。zgR无知

您的新tasks.json文件应该类似于下面的 JSON:zgR无知

{  "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就是我们的示例。zgR无知

注意:您可以在变量参考中了解有关tasks.json变量的更多信息zgR无知

label值是您将在任务列表中看到的;你可以随意命名它。zgR无知

对象中的"isDefault": true值指定当您按Ctrl+Shift+Bgroup时将运行此任务此属性仅为方便起见;如果将其设置为 false,您仍然可以从 Terminal 菜单中使用Tasks: Run Build Task运行它。zgR无知

运行构建#

  1. 回到helloworld.cpp您的任务构建活动文件并且您想要构建helloworld.cpp.zgR无知

  2. 要运行中定义的构建任务tasks.json,请按Ctrl+Shift+B或从终端主菜单中选择运行构建任务zgR无知

  3. 当任务开始时,您应该会看到集成终端面板出现在源代码编辑器下方。任务完成后,终端会显示编译器的输出,指示构建是成功还是失败。对于成功的 g++ 构建,输出如下所示:zgR无知

    G ++在终端中构建输出zgR无知

  4. 使用+按钮创建一个新终端,您将拥有一个以helloworld文件夹作为工作目录的新终端。运行dir,您现在应该会看到可执行文件helloworld.exezgR无知

    PowerShell 终端中的 Hello WorldzgR无知

  5. 您可以helloworld通过键入helloworld.exe(或者.\helloworld.exe如果您使用 PowerShell 终端)在终端中运行。zgR无知

注意:您最初可能需要按几次Enter才能在终端中看到 PowerShell 提示符。此问题应在 Windows 的未来版本中得到修复。zgR无知

修改tasks.json #

您可以tasks.json使用类似的参数"${workspaceFolder}\\*.cpp"而不是${file}这将构建.cpp您当前文件夹中的所有文件。您还可以通过替换"${fileDirname}\\${fileBasenameNoExtension}.exe"为硬编码文件名(例如"${workspaceFolder}\\myProgram.exe")来修改输出文件名。zgR无知

调试 helloworld.cpp #

接下来,您将创建一个launch.json文件来配置 VS Code,以便在您按F5调试程序时启动 GDB 调试器。zgR无知

  1. 从主菜单中,选择Run > Add Configuration...,然后选择C++ (GDB/LLDB)zgR无知

  2. 然后,您将看到各种预定义调试配置的下拉列表。选择g++.exe 构建和调试活动文件zgR无知

C++ 调试配置下拉菜单zgR无知

VS Code 创建一个launch.json文件,在编辑器中打开它,然后构建并运行“helloworld”。zgR无知

{  "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}.exehelloworld.cpp活动文件helloworld.exezgR无知

默认情况下,C++ 扩展不会向您的源代码添加任何断点,并且该stopAtEntry值设置为false.zgR无知

stopAtEntry将值更改为true以使调试器main在您开始调试时停止该方法。zgR无知

注意:该preLaunchTask设置用于指定要在启动前执行的任务。确保它与tasks.json文件label设置一致。zgR无知

开始调试会话#

  1. 返回helloworld.cpp,使其成为活动文件。zgR无知

  2. F5或从主菜单中选择Run > Start Debugging在开始逐步浏览源代码之前,让我们花点时间注意用户界面的一些变化:zgR无知

  • 集成终端出现在源代码编辑器的底部。在“调试输出”选项卡中,您会看到指示调试器已启动并正在运行的输出。zgR无知

  • 编辑器突出显示方法中的第一条语句main这是 C++ 扩展自动为您设置的断点:zgR无知

    初始断点zgR无知

  • 左侧的运行视图显示调试信息。您将在本教程后面看到一个示例。zgR无知

  • 在代码编辑器的顶部,会出现一个调试控制面板。您可以通过抓住左侧的点来在屏幕上移动它。zgR无知

单步执行代码#

现在您已准备好开始单步执行代码。zgR无知

  1. 单击或按调试控制面板中的“跳过”图标。zgR无知

    跳过按钮zgR无知

    这会将程序执行推进到 for 循环的第一行,并跳过创建和初始化变量时调用的vectorstring类中的所有内部函数调用。msg注意左侧变量窗口的变化。zgR无知

    调试窗口zgR无知

    在这种情况下,错误是意料之中的,因为尽管循环的变量名现在对调试器可见,但语句尚未执行,因此此时没有可读取的内容。但是,的内容msg是可见的,因为该语句已完成。zgR无知

  2. 再次按Step over以前进到该程序中的下一条语句(跳过所有为初始化循环而执行的内部代码)。现在,“变量”窗口显示有关循环变量的信息。zgR无知

  3. 再次按Step over以执行cout语句。(请注意,从 2019 年 3 月的版本开始,C++ 扩展在循环退出之前不会将任何输出打印到调试控制台。)zgR无知

  4. 如果您愿意,可以一直按Step over,直到向量中的所有单词都打印到控制台。但是,如果您好奇,请尝试按下Step Into按钮来逐步浏览 C++ 标准库中的源代码!zgR无知

    gcc 标准库头文件中的断点zgR无知

    要返回您自己的代码,一种方法是按住Step over另一种方法是通过切换到helloworld.cpp代码编辑器中的选项卡在代码中设置断点,将插入点放在cout循环内语句的某个位置,然后按F9左侧的装订线中出现一个红点,表示该行已设置断点。zgR无知

    主断点zgR无知

    然后按F5从标准库头中的当前行开始执行。执行将中断cout如果您愿意,可以再次按F9来关闭断点。zgR无知

    循环完成后,您可以在集成终端中看到输出,以及 GDB 输出的一些其他诊断信息。zgR无知

    终端中的调试输出zgR无知

设置手表#

有时您可能希望在程序执行时跟踪变量的值。您可以通过在变量上设置监视来做到这一点。zgR无知

  1. 将插入点放在循环内。Watch窗口中,单击加号并在文本框中输入word,这是循环变量的名称。现在,在您逐步完成循环时查看 Watch 窗口。zgR无知

    观察窗口zgR无知

  2. 通过在循环之前添加以下语句来添加另一个手表:int i = 0;然后,在循环内,添加以下语句:++i;i现在像上一步一样添加一个手表。zgR无知

  3. 要在断点处暂停执行时快速查看任何变量的值,您可以将鼠标指针悬停在该变量上。zgR无知

    鼠标悬停zgR无知

C/C++ 配置#

如果您想更好地控制 C/C++ 扩展,您可以创建一个c_cpp_properties.json文件,该文件将允许您更改设置,例如编译器的路径、包含路径、C++ 标准(默认为 C++17)等等。zgR无知

您可以通过运行命令C/C++: Edit Configurations (UI) from the Command Palette ( Ctrl+Shift+P ) 来查看 C/C++ 配置 UI。zgR无知

命令面板zgR无知

这将打开C/C++ 配置页面。当您在此处进行更改时,VS Code 会将它们写入文件夹中调用c_cpp_properties.json.vscode文件中。zgR无知

在这里,我们将配置名称更改为GCC,将Compiler 路径下拉菜单设置为 g++ 编译器,并设置IntelliSense 模式以匹配编译器 ( gcc-x64 )zgR无知

命令面板zgR无知

Visual Studio Code 将这些设置放在.vscode\c_cpp_properties.json如果您直接打开该文件,它应该如下所示:zgR无知

{  "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}

如果您的程序包含不在工作区或标准库路径中的头文件,您只需添加到包含路径数组设置。zgR无知

编译器路径#

该扩展使用该compilerPath设置来推断 C++ 标准库头文件的路径。当扩展知道在哪里可以找到这些文件时,它可以提供智能完成和转到定义导航等功能。zgR无知

C/C++ 扩展尝试compilerPath根据它在您的系统上找到的内容填充默认编译器位置。该扩展在几个常见的编译器位置中查找。zgR无知

compilerPath搜索顺序为zgR无知

  • 首先检查 Microsoft Visual C++ 编译器zgR无知

  • 然后在 Windows Subsystem for Linux (WSL) 上寻找 g++zgR无知

  • 然后为 Mingw-w64 使用 g++。zgR无知

如果安装了 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++.exezgR无知

故障排除#

安装了 MSYS2,但仍然找不到 g++ 和 gdb #

您必须按照MSYS2 网站上的步骤并使用 MSYS CLI 安装包含这些工具的 Mingw-w64。zgR无知

下一步#

  • 探索VS Code 用户指南zgR无知

  • 查看C++ 扩展概述zgR无知

  • 创建一个新的工作区,将您的.vscodeJSON 文件复制到其中,为新的工作区路径、程序名称等调整必要的设置,然后开始编码!zgR无知


zgR无知

本文由 微wx笑 创作,采用 署名-非商业性使用-相同方式共享 4.0 许可协议,转载请附上原文出处链接及本声明。
原文链接:https://www.ivu4e.cn/toolbox/code/2022-01-21/951.html

很赞哦! () 有话说 ()

相关文章