使用Microsoft C++编译器配置VSCode


在本教程中,您将在 Windows上使用 Microsoft Visual c++编译器和调试器配置 Visual Studio Code

(一)预备知识

要成功完成本教程,您必须完成以下步骤:

  • 1.安装Visual Studio Code

  • 2.安装VS Code的C/ c++扩展。你可以通过在Extensions视图中搜索’c++’ (Ctrl+Shift+X)来安装C/ c++扩展。
    在这里插入图片描述

  • 3.安装Microsoft Visual c++ (MSVC)编译器工具集。
    如果您有一个最新版本的Visual Studio,请从Windows开始菜单中打开Visual Studio Installer,并查看是否检查了c++工作负载。如果没有安装,则选中该框并选择安装程序中的Modify按钮。

    您也可以安装带有c++工作负载的桌面开发,而不需要安装完整的Visual Studio IDE。从Visual Studio下载页面向下滚动,直到在All Downloads下看到Tools for Visual Studio 2019,并选择Build Tools for Visual Studio 2019下载。
    在这里插入图片描述
    这将启动Visual Studio安装程序,它将弹出一个对话框,显示可用的Visual Studio构建工具工作负载。检查Desktop development with C++负载并选择Install
    在这里插入图片描述
    注意:您可以使用Visual Studio Build Tools的c++工具集和Visual Studio Code编译、构建和验证任何c++代码库。

(二)检查您的Microsoft Visual c++安装

要从命令行或VS Code中使用MSVC,你必须在Developer Command Prompt for Visual Studio中运行。普通shell(如PowerShell、Bash或Windows命令提示符)没有设置必要的路径环境变量。

要打开Developer Command Prompt for VS,在Windows开始菜单中输入“Developer”,你应该会看到它出现在建议列表中。确切的名称取决于您安装的Visual Studio或Visual Studio构建工具的版本。选择要打开提示符的项目。
在这里插入图片描述
你可以通过输入'cl'来测试你是否已经正确安装了c++编译器cl.exe,你应该会看到带有版本和基本用法描述的版权信息。
在这里插入图片描述
如果开发人员命令提示符使用BuildTools位置作为开始目录(你不会想把项目放在那里),在你开始创建新项目之前,导航到你的用户文件夹(C:\users\{你的用户名}\)。

(三)创建Hello World

Developer Command Prompt中,创建一个名为“projects”的空文件夹,在这里你可以存储所有的VS Code项目,然后创建一个名为“helloworld”的子文件夹,导航到它,通过输入以下命令在该文件夹(.)中打开VS Code (Code):

mkdir projects
cd projects
mkdir helloworld
cd helloworld
code .

"code ."命令在当前工作文件夹中打开VS code,这将成为你的"workspace"。在学习本教程的过程中,你会看到在工作区的.vscode文件夹中创建了三个文件:

  • tasks.json (构建指令)
  • launch.json (调试器设置)
  • c_cpp_properties.json (编译器路径和智能感知设置)

3.1添加一个源代码文件

“文件资源管理器”标题栏中,选择“新建文件”按钮,并将文件命名为helloworld.cpp
在这里插入图片描述

3.2添加helloworld源代码

现在粘贴源代码:

#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):
在这里插入图片描述
您也可以启用“Auto Save”来自动保存您的文件更改,通过检查File菜单中的“Auto Save”。
最左边的活动栏允许您打开不同的视图,如Search、Source Control和Run。在本教程的后面,您将看到Run视图。你可以在VS Code用户界面文档中找到更多关于其他视图的信息。
注意:当你保存或打开一个C++文件时,你可能会看到来自C/C++扩展的通知,关于内部版本的可用性,它允许你测试新特性和修复。您可以通过选择X(清除通知)来忽略此通知。

3.3探索智能感知

在新的helloworld.cpp文件中,将鼠标悬停在vector或string上以查看类型信息。在声明了msg变量之后,开始键入msg。就像调用成员函数一样。你应该立即看到一个显示所有成员函数的完成列表,以及一个显示msg对象类型信息的窗口:
在这里插入图片描述
Tab键可插入所选成员;然后,当您添加开括号时,您将看到关于函数所需的任何参数的信息。

3.4构建helloworld.cpp

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

从主菜单中选择Terminal > Configure Default Build Task。在下拉菜单中,它将显示一个任务下拉菜单,列出c++编译器的各种预定义构建任务。选择cl.exe build active file,它将构建当前在编辑器中显示(活动)的文件。

在这里插入图片描述
这将在.vscode目录下创建一个tasks.json文件,并在编辑器中打开它。
你的新tasks.json文件看起来应该类似于下面的json(已经安装中文扩展模块):
在这里插入图片描述

{
	"version": "2.0.0",
	"tasks": [
		{
			"type": "cppbuild",
			"label": "C/C++: cl.exe 生成活动文件",
			"command": "cl.exe",
			"args": [
				"/Zi",
				"/EHsc",
				"/nologo",
				"/Fe:",
				"${fileDirname}\\${fileBasenameNoExtension}.exe",
				"${file}"
			],
			"options": {
				"cwd": "${fileDirname}"
			},
			"problemMatcher": [
				"$msCompile"
			],
			"group": {
				"kind": "build",
				"isDefault": true
			},
			"detail": "编译器: cl.exe"
		}
	]
}

command设置指定要运行的程序;在本例中是"cl.exe"args数组指定将被传递给cl.exe的命令行参数。这些参数必须按照编译器所期望的顺序指定。这个任务告诉c++编译器把活跃的文件(${file}),编译它,并在当前目录(${fileDirname})创建一个与有源文件名称相同的. exe可执行文件(${fileBasenameNoExtension}.exe),对于我们的示例是helloworld.exe
注意:您可以了解更多关于tasks.json信息

label是你将在任务列表中看到的;你想叫什么就叫什么。
problemMatcher值选择用于查找编译器输出中的错误和警告。对于cl.exe,如果使用$msCompile问题匹配器,您将得到最好的结果。
group对象中的isDefault: true值指定当按Ctrl+Shift+B时将运行此任务。这个属性只是为了方便;如果您将其设置为false,您仍然可以使用Tasks: Run Build Task从终端菜单中运行它。

3.5运行构建

  • 1.回到helloworld.cpp。您的任务将构建活动文件,而您希望构建helloworld.cpp
  • 2.运行tasks.json中定义的构建任务,按Ctrl+Shift+B或从终端主菜单选择Tasks: Run Build Task构建任务。
  • 3.当任务开始时,您应该看到终端出现在源代码编辑器下面。任务完成后,终端显示编译器的输出,表明构建成功还是失败。对于一个成功的c++构建,输出看起来像这样:
    在这里插入图片描述
    如果构建失败是因为没有找到cl.exe,或者缺少包含路径,确保你已经从Developer Command Prompt for Visual Studio中启动了VS Code。
  • 1.使用+按钮创建一个新终端,您将拥有一个以helloworld文件夹作为工作目录的新终端(运行PowerShell)。运行ls,您现在应该看到可执行文件helloworld.exe以及各种中间c++输出和调试文件(helloworld.obj helloworld.pdb)。
    在这里插入图片描述
  • 你可以通过在终端中输入.\helloworld.exe运行helloworld

3.6修改tasks.json

您可以通过使用像${workspaceFolder}\\*.cpp这样的参数而不是${file}来构建多个c++文件。这将构建当前文件夹中的所有.cpp文件。你也可以通过将${fileDirname}\\${fileBasenameNoExtension}.exe替换为硬编码的文件名(例如${workspaceFolder}\\myProgram.exe)来修改输出文件名。

${workspaceFolder}表示工作目录也就是code .的目录,而${fileDirname}表示打开的文件所在的目录。

(四)调试helloworld.cpp

接下来,当你按下F5来调试程序时,VS Code将创建一个launch.json文件来启动Microsoft c++调试器。在主菜单中,选择Run > Add Configuration...然后选择c++ (Windows)

然后,您将看到一个用于各种预定义调试配置的下拉列表。选择cl.exe build and debug active file

VS Code创建一个launch.json文件,在编辑器中打开它,构建并运行helloworld
在这里插入图片描述
VS Code创建一个launch.json文件,在编辑器中打开它,并构建并运行helloworld

{
    // 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": "cl.exe - 生成和调试活动文件",
            "type": "cppvsdbg",
            "request": "launch",
            "program": "${fileDirname}\\${fileBasenameNoExtension}.exe",
            "args": [],
            "stopAtEntry": false,
            "cwd": "${fileDirname}",
            "environment": [],
            "console": "externalTerminal",
            "preLaunchTask": "C/C++: cl.exe 生成活动文件"
        }
    ]
}

program设置指定要调试的程序。在这里,它被设置为活动文件文件夹${fileDirname}和带有.exe扩展名的活动文件名${fileBasenameNoExtension}.exe,如果helloworld.cpp是活动文件,exe文件将是helloworld.exe

默认情况下,c++扩展不会在源代码中添加任何断点,并且stopAtEntry值设置为false。将stopAtEntry值更改为true,以使调试器在开始调试时在main上停止。

4.1启动调试会话

  • 1.回到helloworld.cpp,使它成为活动文件。
  • 2.按F5或从主菜单中选择Run > Start Debugging。在您开始逐步执行源代码之前,让我们花点时间来注意一下用户界面中的几个变化:
    • 集成终端出现在源代码编辑器的底部。在Debug Output选项卡中,可以看到指示调试器已启动并正在运行的输出。
    • 编辑器突出显示main方法中的第一条语句。这是一个断点,c++扩展自动为您设置:
      在这里插入图片描述
      左边的Run视图显示调试信息。在本教程的后面,您将看到一个示例。
      在代码编辑器的顶部,会出现一个调试控制面板。你可以通过抓取左边的点在屏幕上移动它。

4.2逐步执行代码

现在,您可以开始逐步执行代码了。

  • 1.在调试控制面板中选择Step over图标,直到for (const string& word: msg)语句突出显示。
    在这里插入图片描述在这里插入图片描述
    Step Over命令跳过在创建和初始化msg变量时调用的vector和string类中的所有内部函数调用。注意左边的Variables窗口中的变化。在这种情况下,错误是预期的,因为尽管循环的变量名现在对调试器可见,但语句还没有执行,所以此时没有可读的内容。但是msg的内容是可见的,因为语句已经完成。
  • 2.再次按下Step Over进入程序中的下一条语句(跳过为初始化循环而执行的所有内部代码)。现在,Variables窗口显示了关于循环变量的信息。
  • 3.再次按Step over来执行cout语句。截至2019年3月版本的扩展,没有输出显示,直到循环完成。
  • 4.如果愿意,可以继续按Step over,直到vector中的所有单词都被打印到控制台。但是,如果您对此感到好奇,可以尝试按下Step Into按钮来逐步查看c++标准库中的源代码!
    在这里插入图片描述
    要返回到您自己的代码,一种方法是一直按Step over。另一种方法是在代码中设置断点,方法是切换到代码编辑器中的helloworld.cpp选项卡,将插入点放在循环中cout语句的某个位置,然后按F9。左边的凹槽中出现一个红点,表示在该行上设置了断点。
    在这里插入图片描述
    然后按F5从标准库头文件的当前行开始执行。执行将中断在cout。如果您愿意,可以再次按F9来切换断点。

(五)设置watch

有时,您可能希望在程序执行时跟踪变量的值。您可以通过在变量上设置一个watch来做到这一点。

  • 1.将插入点放在循环中。在watch窗口中,选择加号,并在文本框中输入word,这是循环变量的名称。现在,当您步进循环时,查看Watch窗口。
    在这里插入图片描述
  • 2.通过在循环之前添加下面的语句int i = 0;来添加另一个watch,然后,在循环内部添加如下语句++i;。现在为i添加一个watch,就像你在前面的步骤中做的那样。
  • 3.要在断点上暂停执行时快速查看任何变量的值,可以使用鼠标指针将鼠标悬停在该断点上。
    在这里插入图片描述

(六) C/C++配置

如果您想要更多地控制 C/C++扩展,可以创建c_cpp_properties.json文件,它将允许你改变设置,如编译器的路径,包括路径,c++标准(默认是c++ 17),以及更多。

您可以通过命令面板(Ctrl+Shift+P)运行命令C/C++: Edit Configurations (UI)来查看C/C++配置UI。
在这里插入图片描述
这将打开C/C++ Configurations页面。当您在这里进行更改时,VS Code将它们写入.vscode文件夹中名为c_cpp_properties.json的文件。
在这里插入图片描述
Visual Studio Code将这些设置放在.vscode\c_cpp_properties.json中。如果你直接打开那个文件,它应该是这样的:

{
    "configurations": [
        {
            "name": "Win32",
            "includePath": [
                "${workspaceFolder}/**"
            ],
            "defines": [
                "_DEBUG",
                "UNICODE",
                "_UNICODE"
            ],
            "windowsSdkVersion": "10.0.17763.0",
            "compilerPath": "C:\\Program Files (x86)\\Microsoft Visual Studio\\2017\\Community\\VC\\Tools\\MSVC\\14.16.27023\\bin\\Hostx64\\x64\\cl.exe",
            "cStandard": "c17",
            "cppStandard": "c++17",
            "intelliSenseMode": "windows-msvc-x64"
        }
    ],
    "version": 4
}

如果程序包含不在工作空间或标准库路径中的头文件,则只需要添加到includePath数组设置中。

6.1编译器路径

compilerPath设置是配置中的一个重要设置。扩展使用它来推断c++标准库头文件的路径。当扩展知道在哪里找到这些文件,它可以提供有用的功能,如智能补全和Go to Definition导航。

C/C++扩展尝试根据它在系统上找到的编译器位置来填充compilerPath。该扩展查找几个常见的编译器位置。
compilerPath的搜索顺序是:

  • 首先检查Microsoft Visual c++ compiler
  • 然后在Windows子系统(WSL)上查找g++
  • 然后是Mingw-w64的g++。

如果安装了g++或WSL,可能需要更改compilerPath以匹配项目的首选编译器。对于Microsoft c++,路径应该像这样,取决于你安装的具体版本:“C:/Program Files (x86)/Microsoft Visual Studio/2017/BuildTools/VC/Tools/MSVC/14.16.27023/bin/Hostx64/x64/cl.exe”

(七)重用您的c++配置

VS Code现在配置为使用Microsoft c++编译器。该配置应用于当前工作区。要重用配置,只需将JSON文件复制到一个新项目文件夹(工作区)中的.vscode文件夹中,并根据需要更改源文件和可执行文件的名称。

(八)在Developer Command Prompt外运行VS Code

在某些情况下,在Visual Studio的Developer Command Prompt中运行VS Code是不可能的(例如,在通过SSH的远程开发场景中)。在这种情况下,您可以使用以下tasks.json配置在构建期间自动初始化Visual Studio的Developer Command Prompt

{
  "version": "2.0.0",
  "windows": {
    "options": {
      "shell": {
        "executable": "cmd.exe",
        "args": [
          "/C",
          // The path to VsDevCmd.bat depends on the version of Visual Studio you have installed.
          "\"C:/Program Files (x86)/Microsoft Visual Studio/2019/Community/Common7/Tools/VsDevCmd.bat\"",
          "&&"
        ]
      }
    }
  },
  "tasks": [
    {
      "type": "shell",
      "label": "cl.exe build active file",
      "command": "cl.exe",
      "args": [
        "/Zi",
        "/EHsc",
        "/Fe:",
        "${fileDirname}\\${fileBasenameNoExtension}.exe",
        "${file}"
      ],
      "problemMatcher": ["$msCompile"],
      "group": {
        "kind": "build",
        "isDefault": true
      }
    }
  ]
}

注意: VsDevCmd.bat的路径可能会因Visual Studio版本或安装路径的不同而不同。你可以通过打开命令提示符并运行dir "\VsDevCmd*" /s来找到VsDevCmd.bat的路径。

(九)疑难解答

9.1无法识别术语“cl.exe”

如果你看到错误”The term ‘cl.exe’ is not recognized as the name of a cmdlet, function, script file, or operable program”,这通常意味着您正在运行Developer Command Prompt for Visual Studio以外的Visual Studio和VSCode不知道cl.exe编译器的路径。

VS Code必须从Visual Studio的Developer Command Prompt for Visual Studio启动,或者任务必须配置为在开发人员命令提示符之外运行。

你总是可以通过创建一个新终端Ctrl+Shift+``通过输入cl命令来检查你是否从Visual Studio的Developer Command Prompt for Visual Studio启动。

9.2 fatal error C1034: assert.h: no include path set

在这种情况下,cll .exe可以通过PATH环境变量被VS Code使用,但是VS Code仍然需要从Visual Studio的Developer Command Prompt启动,或者配置为在Developer Command Prompt之外运行。否则,cl.exe无法访问重要的环境变量,如INCLUDE

参考目录

https://code.visualstudio.com/docs/cpp/config-msvc

  • 4
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
要在Ubuntu系统上配置C++和OpenCV的开发环境,您可以按照以下步骤进行操作: 1. 首先,请确保您的系统上已经安装了C++编译器和cmake工具。如果没有安装,请在终端中运行以下命令: ``` sudo apt-get update sudo apt-get install build-essential cmake ``` 2. 接下来,您需要安装OpenCV库。可以按照以下命令进行安装: ``` sudo apt-get install libopencv-dev ``` 3. 为了在VScode中进行编写和调试,您需要安装C++扩展。在VScode中打开扩展标签,搜索"C++",然后选择Microsoft官方的"C++"扩展进行安装。 4. 配置VScode使用OpenCV库。在VScode中打开要进行开发的项目文件夹,创建一个名为`.vscode`的文件夹,并在其中创建一个名为`settings.json`的文件。将以下内容添加到`settings.json`文件中: ```json { "configurations": [ { "name": "C++", "includePath": [ "${workspaceFolder}/**", "/usr/include/opencv4/" ], "defines": [], "compilerPath": "/usr/bin/g++", "cStandard": "c17", "cppStandard": "c++17", "intelliSenseMode": "gcc-x64" } ], "version": 4 } ``` 5. 现在您可以在VScode中编写和调试C++代码了。您可以创建一个新的C++源文件(例如,a.cpp),并根据您的需要包含OpenCV头文件和其他必要的头文件。例如,您可以使用以下代码来读取图像: ```cpp #include <opencv2/opencv.hpp> #include <iostream> using namespace cv; using namespace std; int main() { const char* imgPath = "/path/to/your/image.jpg"; Mat img = imread(imgPath); cout << "Image width: " << img.cols << endl; cout << "Image height: " << img.rows << endl; return 0; } ``` 请确保将图像路径替换为实际的图像路径。 6. 按下F5或点击VScode的调试按钮来运行和调试您的代码。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值