VSCode 配置 C++ 编译环境

花费了将近一个半小时才把 Windows 运行 VSCode 编译 C 的环境搭建起来,参照 VSCode 的官方文档操作,运行时还是“Duang”的反复报错,网上的帖子有很多,大多数作为入门贴,操作起来着实不方便,而且对一些问题的处理细节不到位,让人照着操作可能会成功,但不知其所以然。
今天把自己的血泪史和理解整理成文章,为常年奋战在 Windows 一线开发的程序员在首次搭建 VSCode 编译环境时提供一点点参考。
废话不多说,一起来看看我今天遇到的坑和解决过程。

前提

1.已经安装 VS2019 Preview 版本。重点不是 Visual Studio 的版本,而是安装时必须选择 C/C++ 运行时库。
2.下载安装 VSCode ,并更新至最新版。

官方教程

本节不详细介绍操作的具体流程,只是简单罗列关键步骤和文档结果,详细的过程和参数说明见 VSCode 的官方文档:https://code.visualstudio.com/docs/cpp/config-msvc#_the-term-clexe-is-not-recognized

准备工作

详细内容参见官方文档的操作步骤,虽然是英文,但内容图文并茂关键操作都有高亮显示和工具下载的跳转链接,非常易读,关键步骤如下:

  1. 安装 VSCode
  2. 运行 VSCode,安装 C/C++ extension for VS Code 插件。
  3. 安装 Microsoft Visual C++ (MSVC) 工具包。
  4. 检查 MSVC 工具包的是否安装成功。

创建示例工程

1.创建示例代码,安装编程惯例,第一个程序一定是 HelloWorld,本次也不例外。
新建空文件夹,使用 VSCode 设置为工程目录,使用 VSCode 创建 helloworld.cpp 文件,并加入示例代码。

#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;
}
  1. 编译 helloworld.cpp
    2.1 创建 task.json 文件
    task.json 负责设置编译选项,创建方式 Terminal > Configure Default Build Task 选择 C/C++:cl.exe build active file ,在 .vscode 目录下生成 tasks.json 文件,内容如下:
{
  "version": "2.0.0",
  "tasks": [
    {
      "type": "shell",
      "label": "C/C++: cl.exe 生成活动文件",  // 此处的内容与系统语言有关,中文语言则显示中文
      "command": "cl.exe",
      "args": [
        "/Zi",
        "/EHsc",
        "/Fe:",
        "${fileDirname}\\${fileBasenameNoExtension}.exe",   // 第一个坑!
        "${file}"                                           // 第二个坑!
      ],
      "problemMatcher": ["$msCompile"],
      "group": {
        "kind": "build",
        "isDefault": true
      }
    }
  ]
}

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

2.3 创建 c_cpp_properties.json 文件
按照官方文档,选择 C/C++ 的 UI 配置方式创建出如下的配置文件:

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

其中 "compilerPath" 的内容与当前环境已安装的编译器有关,不需要过度关心,如果在 UI 配置环节没有检测到编译器,则需要回到开篇处,先安装相关的 C/C++ 编译器。

代码编译

配置完毕,开始编译,遇到如下坑:

坑1:未初始化VS环境变量

问题现象:VSCode 在左侧导航栏选择 “Debug” 标签页,运行设置选择配置文件中所罗列的 “cl.exe - 生成和调试活动文件”,操作截图如下:
错误原因:VSCode 的终端无法正常识别 cl.exe ,在终端中输入 cl.exe 果然没有看到帮助信息的提示内容。
解决方案

  • 方案1(不推荐):将 VS 的环境变量全部加入计算机环境变量,添加内容如下:
//在Path中添加cl.exe所在文件夹路径。若未找到,直接VS的安装目录下搜索cl.exe即可
C:\Program Files\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.16.27023\bin\Hostx86\x86;
//在系统变量中新建变量INCLUDE,添加cl.exe的包含目录
C:\Program Files\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.16.27023\include;
C:\Program Files\Windows Kits\10\Include\10.0.17763.0\shared;
C:\Program Files\Windows Kits\10\Include\10.0.17763.0\ucrt;
C:\Program Files\Windows Kits\10\Include\10.0.17763.0\um;
C:\Program Files\Windows Kits\10\Include\10.0.17763.0\winrt;
//在系统变量中新建变量LIB,添加cl.exe的库目录
C:\Program Files\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.16.27023\lib\x86;
C:\Program Files\Windows Kits\10\Lib\10.0.17763.0\um\x86;
C:\Program Files\Windows Kits\10\Lib\10.0.17763.0\ucrt\x86;
————————————————
版权声明:本文为CSDN博主「北冥有鱼wyh」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_34801642/article/details/105453161

方案2(推荐):使用 MSVC 的命令行工具启动 VSCode,此方式较方案1来说,具有更强的灵活性,对其他工程影响小。

  1. Windows 开始菜单搜索 “VS” 选择命令行工具,我的电脑是安装 VS2019 Preview,我选择运行 “x64 Native Tools Command Prompt for VS 2019 Preview” 工具。
  2. 启动后可以尝试运行 cl.exe 可以看到正常的命令行工具提示信息。
**********************************************************************
** Visual Studio 2019 Developer Command Prompt v16.5.0-pre.2.0
** Copyright (c) 2019 Microsoft Corporation
**********************************************************************
[vcvarsall.bat] Environment initialized for: 'x64'
C:\Program Files (x86)\Microsoft Visual Studio\2019\Preview>cl.exe
用于 x64 的 Microsoft (R) C/C++ 优化编译器 19.25.28508.3 版
版权所有(C) Microsoft Corporation。保留所有权利。
用法: cl [ 选项... ] 文件名... [ /link 链接选项... ]
  1. 在初始化环境变量的终端里启动 VSCode,输入 "code" 即可启动 VSCode。当然也可以运行 VSCode 的安装路径(*.exe)。

为什么执行 “x64 Native Tools Command Prompt for VS 2019 Preview” 会初始化 MSVC 的环境变量?
这个问题可以自行百度,有一定基础的程序员可以通过文件属性,查看快捷方式的启动命令,实际上这里的快捷方式是调用 MSVC 命令行工具并在启动时完成当前版本 VS 环境的初始化操作,上述流程对于使用 NMake 构建的开发者来说一定不陌生。

  1. 启动上一步创建成功的工作目录,在 VSCode 的中断中输入 cl.exe 即可看到提示信息。
  2. 运行程序

坑2:task.json 部分设置未更改

点击 VSCode 左侧的 "Debug" 按钮,选择运行,提示如下错误:

正在启动生成...
cl.exe /Zi /EHsc /nologo /Fe: C:\Users\Documents\C\HelloVSCode\.vscode\tasks.exe C:\Users\Documents\C\HelloVSCode\.vscode\tasks.json
cl: ������ warning D9024 :�޷�ʶ���Դ�ļ����͡�C:\Users\Documents\C\HelloVSCode\.vscode\tasks.json�����ٶ�Ϊ�����ļ�
C:\Users\Documents\C\HelloVSCode\.vscode\tasks.json : fatal error LNK1107: �ļ���Ч����: �޷��� 0x1DC ����ȡ
生成已完成,但出现错误.
The terminal process failed to launch (exit code: -1).
Terminal will be reused by tasks, press any key to close it.

错误原因:从输出的信息来看 cl.exe 编译的文件并非期望的 “helloworld.exe” 和 “helloworld.cpp” 文件而是 task.json 文件,问题就出在这里,创建 task.json 之后需要将参数 “args” 中的参数进行修改,其中包括:

  1. "${fileDirname}\\${fileBasenameNoExtension}.exe" 改为当前应用程序的文件名 "helloworld.exe"
  2. "${file}" 改为 "helloworld.cpp"
    修改后的配置 task.json 配置内容如下:
{
    "version": "2.0.0",
    "tasks": [
        {
            "type": "cppbuild",
            "label": "C/C++: cl.exe 生成活动文件",
            "command": "cl.exe",
            "args": [
                "/Zi",
                "/EHsc",
                "/nologo",
                "/Fe:",
                "helloworld.exe",
                "helloworld.cpp"
            ],
            "options": {
                "cwd": "${workspaceFolder}"
            },
            "problemMatcher": [
                "$msCompile"
            ],
            "group": {
                "kind": "build",
                "isDefault": true
            },
            "detail": "编译器: cl.exe"
        }
    ]
}

提个小问题,为什么配置文件中不是设置文件的全路径?
原因是下文的配置选项中已设置工作目录 “cwd”: “${workspaceFolder}”,如果代码文件不在当前工程的根目录则需要写入相对路径。

坑3:launch.json 部分配置未更改

问题的原因同 task.json 配置,其中
"program": "${fileDirname}\\${fileBasenameNoExtension}.exe"
运行程序的名称并未修改为当前工程的名称,
参照 task.json"${fileDirname}\\${fileBasenameNoExtension}.exe" 内容修改为 "helloworld.exe",修改配置如下:

{
    // 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": "helloworld.exe",
            "args": [],
            "stopAtEntry": true,
            "cwd": "${workspaceFolder}",
            "environment": [],
            "console": "externalTerminal",
            "preLaunchTask": "C/C++: cl.exe 生成活动文件"
        }
    ]
}

再次调试运行,代码进入熟悉的调试界面,熟悉的快捷键,仿佛回到 Visual Studio 的调试。

运行调试

开始调试程序,让 VSCode 成为日常办公的利器,本篇踩坑记录到此为止。

总结

  1. 遇到问题的原因,缺少 MSVC 环境变量的机制,初始配置环境找不到 cl.exe 是第一个拦路虎,知晓原因后问题迎刃而解。
  2. 编译报错,这一点主要是看使用者的细心程度,仔细的阅读官方文档或者查看错误提示信息,都可以找到解决问题的蛛丝马迹。留意每一个错误中的提示信息,都会是解决问题的启发点。

参考链接

  • VSCode MSVC 配置官方文档:https://code.visualstudio.com/docs/cpp/config-msvc#_the-term-clexe-is-not-recognized
  • VSCode 变量说明:https://code.visualstudio.com/docs/editor/variables-reference
  • Visual Studio 环境变量设置:https://blog.csdn.net/qq_34801642/article/details/105453161
  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值