VSCode开发C、C++环境搭建系列(三)——基于MSVC搭建

前言:本文为系列文章的第三篇,讲解如何利用Windows C++(MSVC)结合VS Code搭建一个完整的开发环境,前面的两篇文章参考下面:

VSCode开发C、C++环境搭建系列(一)——基于Mingw-w64搭建

VSCode开发C、C++环境搭建系列(二)——GCC/G++编译器对头文件、静态库、动态库的搜索路径详解

详细关于MSVC的使用可以参考官方网站:

https://docs.microsoft.com/zh-cn/cpp/build/reference/c-cpp-building-reference?view=vs-2019

一、MSVC简介

关于什么是MSVC,简单来说就是Windows实现的C/C++的一整套编译套件,不建议单独安装,建议直接安装整个Visual Studio 2017或者是2019版本,比较好,我个人的安装目录如下:

本文的所有内容都是基于此来说明的。同前面的Ming-win一样,MSVC整个也是一整套套件,包含很多的应用程序,在bin目录下面我们可以看到下面几个主要的可执行程序,这里可以参考第一篇文章哦!!!

Windows下VS套件自带的编译程序有以下这些:

  • cl.exe:编译程序
  • link.exe:链接程序
  • lib.exe:加载lib库的程序
  • nmake.exe:用Makefile进行构建、编译的工具

所以,我们需要将下面的目录添加到PATH环境变量:

D:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.14.26428\bin\Hostx64\x64

二、Visual Studio 2017的编译套件简介

2.1 Visual Studio2017的几个命令工具介绍

安装完成之后,会在开始菜单中有一个Visual Studio 2017文件夹中出现很多的工具,大致截图如下:

当然每一个命令工具的作用这里不细说,我们可以这样理解,这些命令工具类似于anaconda安装之后得到的conda prompt命令行工具,是方便我们使用各种Visual Studio 2017套件的命令的,这比自己通过设置环境变量,然后通过cmd ,powershell终端工具来得更方便,而且可以避免出现很多莫名其妙的错误,我后面会专门这个点来说。

比如我们可以打开一个命令工具,比如上面的绿色方框的第一个,然后输出如下命令:

csc -help

这是C#的编译器,会得到很多帮助信息

cl -help

这是C/C++的编译器,同样会得到很多的帮助信息。

2.2 使用VS 2017开发一个简单的C/C++程序的一些注意点

我们通过VS提供强大的功能,编写完成之后,生成项目(这实际上就是编译的整个过程),然后直接运行,一气呵成,但实际上有很多工作自动完成了,只不过我们不用自己管理。

问题一:编译的时候那些头文件,库文件(静态库,动态库)到底在哪里?

实际上很简单,我们完全可以查看,这帮助我们理解C/C++整个的编译过程很重要的。

在项目上右击,打开项目属性,得到如下界面:

一共有5个点需要说明

(1)可执行文件目录——对应PATH环境变量

我们点击查看这个的内容得到如下一些内容:

D:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.14.26428\bin\HostX86\x86   #cl编译器所在的位置
D:\Windows Kits\10\bin\10.0.17134.0\x86
C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6.1 Tools
D:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\tools
D:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\ide
C:\Program Files (x86)\HTML Help Workshop
D:\Program Files (x86)\Microsoft Visual Studio\2017\Community\MSBuild\15.0\Bin
C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\
C:\WINDOWS\SysWow64
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.0\bin
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.0\libnvvp
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.0\bin
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.0\libnvvp
D:\ProgramData\Anaconda3
D:\ProgramData\Anaconda3\Library\mingw-w64\bin
D:\ProgramData\Anaconda3\Library\usr\bin
D:\ProgramData\Anaconda3\Library\bin
D:\ProgramData\Anaconda3\Scripts
C:\Windows\system32
C:\Windows
C:\Windows\System32\Wbem
C:\Windows\System32\WindowsPowerShell\v1.0\
C:\Windows\System32\OpenSSH\
C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common
C:\Program Files\NVIDIA Corporation\NVIDIA NvDLISR
C:\Program Files\dotnet\
C:\Program Files\Microsoft SQL Server\130\Tools\Binn\
C:\Program Files\Git\cmd
D:\Program Files (x86)\Graphviz2.38\bin
C:\WINDOWS\system32
C:\WINDOWS
C:\WINDOWS\System32\Wbem
C:\WINDOWS\System32\WindowsPowerShell\v1.0\
C:\WINDOWS\System32\OpenSSH\
D:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.14.26428\bin\Hostx64\x64
D:\Program Files\mingw64\bin
C:\Users\Administrator\AppData\Local\Microsoft\WindowsApps
D:\Program Files (x86)\Microsoft VS Code\bin
C:\Users\Administrator\AppData\Local\BypassRuntm
%USERPROFILE%\AppData\Local\Microsoft\WindowsApps

我们发现有很多目录实际上就是环境变量PATH的值,也就说这个 “可执行文件目录” 里面包含的是个能在编译以及运行的过程中需要用到的一些程序,当然也包括了最基本的什么cl.exe,link.exe,lib.exe等等,这是自动添加,我们还可以手动给它添加其他的目录。

(2)包含目录(Include)——对应INCLUDE环境变量

这个实际上就是告诉编译器要去那些地方寻找我们程序运行需要的头文件,里面的值包含:

D:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.14.26428\include    # MSVC套件的
D:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.14.26428\atlmfc\include #MSVC套件的
D:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\VS\include
D:\Windows Kits\10\Include\10.0.17134.0\ucrt     # Win10 SDK的
D:\Windows Kits\10\Include\10.0.17134.0\um
D:\Windows Kits\10\Include\10.0.17134.0\shared
D:\Windows Kits\10\Include\10.0.17134.0\winrt
D:\Windows Kits\10\Include\10.0.17134.0\cppwinrt
C:\Program Files (x86)\Windows Kits\NETFXSDK\4.6.1\Include\um

我们发现除了MSVC套件的头文件目录之外,还有Windows 10 SDK,这个的木也是知道的,实际上我们在安装VS的过程中可以选择安装不同的Windows 10 套件,我们还可以添加其他的头文件路径,比如我们在开发opencv的时候就需要添加opencv的头文件目录。

注意:这个实际上就是我们的INCLUDE环境变量所对应的值,但是我们一般并没有创建这个环境变量啊,依然可以正常的编写C/C++程序,这其实就是VS的功劳了,VS会自动告诉编译器去哪里寻找,并不需要借助INCLUDE环境变量,所以即便没有,通过VS编写C/C++依然不会有影响。

(3)引用目录(MSVC套件的库lib)——对应LIBPATH环境变量

D:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.14.26428\atlmfc\lib\x86
D:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.14.26428\lib\x86

(4)库目录——对应LIB环境变量

D:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.14.26428\lib\x86
D:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.14.26428\atlmfc\lib\x86
D:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\VS\lib\x86
D:\Windows Kits\10\lib\10.0.17134.0\ucrt\x86
D:\Windows Kits\10\lib\10.0.17134.0\um\x86
C:\Program Files (x86)\Windows Kits\NETFXSDK\4.6.1\lib\um\x86
C:\Program Files (x86)\Windows Kits\NETFXSDK\4.6.1\Lib\um\x86

(5)Windows运行目录——串联到前面的运行目录LIBPATH后面

D:\Windows Kits\10\References

注意事项:

这里的INCLUDE、LIBPATH、LIB 三个环境变量所对应的值,但是我们一般并没有创建这几个环境变量啊,依然可以正常的编写C/C++程序,这其实就是VS的功劳了,VS会自动告诉编译器去哪里寻找,并不需要借助INCLUDE环境变量,去哪里寻找我们的库文件(静态库,动态库),所以即便没有,通过VS编写C/C++依然不会有影响。

不仅如此,如果我们编写了一个C/C++代码,然后通过 “VS安装的命令工具” 进行编译依然不需要这几个环境变量,由于是VS安装自带的命令工具(上面红色方框中的那几个命令行工具),所以依然具备这种自动寻找头文件和库文件的能力;

但是需要注意的是,我们自己如果通过cmd  powershell 来打开cl编译,则会报错,既找不到头文件在哪里,也找不到库文件在哪里,所以没办法编译,就需要设置这几个环境变量,并且将相应的值写进去。

后面还会说到。

 

三、VS Code配置C/C++开发环境

这里依照的是官方网站上面的三步走,大致设置过程同前面的第一篇文章,这里直接给出来我的设置结果:

3.1 设置c_cpp_properties.json

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

这里主要是设置编译器的路径,以及编译器需要寻找的头文件、库文件的搜索地址,这和Ming-w64实际上是一样的,但是不一样的是多了一个

 "windowsSdkVersion": "10.0.17134.0",

这个实际上就是Windows10的SDK,参见前面。

3.2 配置tasks.json

{
    "version": "2.0.0",
    "tasks": [
      {
        "label": "msvc build",
        "type": "shell",
        "command": "cl.exe",
        "args": ["/EHsc", "/FS","/Zi", "/Fe:", "helloworld.exe", "helloworld.cpp"],
        "group": {
          "kind": "build",
          "isDefault": true
        },
        "presentation": {
          "reveal": "always"
        },
        "problemMatcher": "$msCompile"
      }
    ]
}

这个实际上生成项目需要的一些配置,这里与前面的Ming-w64是大同小异的,不再多说。

3.3 配置lauch.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": "(msvc) Launch",
            "type": "cppvsdbg",
            "request": "launch",
            "program": "${workspaceFolder}/helloworld.exe",
            "args": [],
            "stopAtEntry": true,
            "cwd": "${workspaceFolder}",
            "environment": [],
            "externalConsole": false
          }
    ]
}

这里是运行程序需要的一些配置。

3.4 输入简单的测试代码 helloworld.cpp

#include <iostream>
#include <vector>
#include <string>

using namespace std;

int main()
{

    vector<string> msg {"Hello", "C++", "World", "from", "VS Code!"};
    
    for (const string& word : msg)
    {
        cout << word << " ";
    }
    cout << endl;
}

按照官网的做法,首先执行 “终端/运行生成任务...” 菜单,即Ctrl+Shift+B,并没有像官网说的那样生成可执行文件,而是出现了错误,显示无法找到 iostream、vector、string等,这一段代码是完全没有问题的,为什么会出错呢?那就是编译器cl没有找到头文件和库文件在哪里,怎么解决呢?

(1)解决方案一——借助于VS自带的几个命令行工具

打开64位的命令行工具,因为它是跟VS一样的,会自动进行查找

**********************************************************************
** Visual Studio 2017 Developer Command Prompt v15.7.5
** Copyright (c) 2017 Microsoft Corporation
**********************************************************************
[vcvarsall.bat] Environment initialized for: 'x64'  # 这是适用于64位的,以管理员身份运行

C:\Windows\System32>e:  # 进入E盘

E:\>cd E:\C Advanced Learn\msvc_c   # 这是我的C++代码所在的文件目录

E:\C Advanced Learn\msvc_c>cl helloworld.cpp  # 编译就一句话
用于 x64 的 Microsoft (R) C/C++ 优化编译器 19.14.26433 版
版权所有(C) Microsoft Corporation。保留所有权利。

helloworld.cpp
D:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.14.26428\include\xlocale(315): warning C4530: 使用了 C++ 异常处理程序,但未启用展开语义。请指定 /EHsc
Microsoft (R) Incremental Linker Version 14.14.26433.0
Copyright (C) Microsoft Corporation.  All rights reserved.

/out:helloworld.exe         # 输出了可执行文件
helloworld.obj

E:\C Advanced Learn\msvc_c>helloworld.exe  # 运行程序得到结果
Hello C++ World from VS Code!

E:\C Advanced Learn\msvc_c>

所以我们可以通过VSCode来编写代码,然后自己通过VS2017所带的命令行工具进行手动编译,当然这很不方便,相当于我们的生成项目和执行没能够做到一体化,自动化,不是很方便。

(2)解决方案二——配置需要的环境变量

因为我们在vscode里面的终端实际上要么是系统的cmd,要么是powershell,然后在里面使用cl命令,没把发找到库文件可头文件需要借助前面那三个环境变量:INCLUDE   LIBPATH  LIB  ,所以我们自己配置这三个环境变量,并且借助VS2017,将相对应的值写入到环境变量,然后在VScode里面执行生成,然后进行调试运行就很方便了。

 

注意事项:

我的有一台电脑上按照上面的配置可以正常执行,但是另外一台电脑上又会出现另外一个错误,那就是:

libcpmt.lib(uncaught_exception.obj) : fatal error LNK1112: 模块计算机类型“x86”与目标计算机类型“x64”冲突

我尝试了各种街机也办法,但是依然没有成功,目前也没有找到正确的解决方法,如果有哪一位大神知道,望告知,谢谢!

建议:

如果真的要在Windows上面开发C/C++程序,还是老老实实使用Visual Studio 吧,毕竟比较快捷方便,可以避免很多的坑,不用那么麻烦。

如果有时间,后面还会更新一系列的关于配置方面的文章,后面的文章预告:

(一)VS2017如何创建静态库,并使用自己的静态库

(二)VS2017配置Opencv4.1.1开发环境(临时配置与永久配置的方法)

(三)基于Ming-W64+VS Code搭建opencv4.1.1的开发环境

(四)Cygwin的配置

(五)MSYS2的配置

(六)Windows平台配置Clang

 

 

参考文献:

https://blog.csdn.net/zhangpeterx/article/details/86602394

  • 7
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
以下是在VS Code中配置C/C++环境使用MSVC编译器的步骤: 1. 安装VS Code:首先,你需要安装VS Code编辑器。你可以从官方网站下载并按照安装说明进行安装。 2. 安装C/C++扩展:在VS Code中,你需要安装C/C++扩展以便支持C/C++开发。在VS Code的扩展面板中搜索"C/C++",然后点击安装。 3. 安装MSVC编译器工具集:你需要安装Microsoft C++ (MSVC)编译器工具集。你可以从Microsoft官方网站下载并按照安装说明进行安装。 4. 配置IntelliSense文件:在VS Code中,你可以配置IntelliSense以提供代码补全和语法检查功能。你可以在项目根目录下创建一个名为".vscode"的文件夹,并在该文件夹中创建一个名为"c_cpp_properties.json"的文件。在该文件中,你可以指定编译器的路径和其他相关配置。以下是一个示例配置文件: ```json { "configurations": [ { "name": "Win32", "includePath": [ "${workspaceFolder}/**" ], "defines": [], "compilerPath": "C:/path/to/msvc_compiler", "cStandard": "c11", "cppStandard": "c++17", "intelliSenseMode": "msvc-x64" } ], "version": 4 } ``` 请注意,你需要将"compilerPath"字段的值替换为你实际安装的MSVC编译器的路径。 5. 创建编译任务文件:在VS Code中,你可以创建一个名为"tasks.json"的文件来定义编译任务。在项目根目录下的".vscode"文件夹中创建该文件,并添加以下内容: ```json { "version": "2.0.0", "tasks": [ { "label": "build", "type": "shell", "command": "cl.exe", "args": [ "/EHsc", "/Fe:", "${file}" ], "group": { "kind": "build", "isDefault": true } } ] } ``` 请注意,你可能需要根据你的项目和编译器的要求进行适当的修改。 6. 创建调试配置文件:在VS Code中,你可以创建一个名为"launch.json"的文件来定义调试配置。在项目根目录下的".vscode"文件夹中创建该文件,并添加以下内容: ```json { "version": "0.2.0", "configurations": [ { "name": "(Windows) Launch", "type": "cppvsdbg", "request": "launch", "program": "${workspaceFolder}/a.exe", "args": [], "stopAtEntry": false, "cwd": "${workspaceFolder}", "environment": [], "externalConsole": true } ] } ``` 请注意,你可能需要根据你的项目和编译器的要求进行适当的修改。 7. 调试源程序:现在,你可以在VS Code中打开你的C/C++源代码文件,并使用上述配置进行编译和调试。你可以按下F5键开始调试。 总结:以上是在VS Code中配置C/C++环境使用MSVC编译器的步骤。通过这些步骤,你可以在VS Code中进行C/C++开发,并使用MSVC编译器进行编译和调试。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值