由于最近的学习需求,折腾起了vscode,毕竟是跨平台,对以后项目的拓展也很方便。至于为什么不用mingw, tdm-gcc一类,主要因为毕竟是Windows平台,使用自家的MSVC开发环境一来可以放心,少出BUG,二来能够增强Windows上其他自家库的拓展性(例如DX,Windows SDK),三来VS着实臃肿,启动较慢,用vscode牺牲功能换取效率,在学习过程中还是比较值得的(SSD请回避)。
总的来说,配置过程头皮发麻,错误百出,查阅了不少资料,将目前的所得暂且记下,作为备忘。

总体步骤

总算折腾出了Hello World 和 1+2=3,总体步骤说起来也就那么几步,如下:

  1. 安装Visual Studio 构建工具
  2. 安装Visual Studio Code和C++插件
  3. 创建项目目录
  4. 启动Visual Studio Code
  5. cpp配置文件
  6. 运行配置文件
  7. 任务配置文件
  8. build & debug
  9. 优化启动配置


安装Visual Studio 构建工具

进入VS官网下载页面,找到
“所有下载–Visual Studio xxxx 工具–Visual Studio 2019 生成工具”,
下载,选择安装“C++生成工具”即可,当然,安装过程中右侧有可选项,酌情安装,第一步完成。


安装Visual Studio Code和C/C++插件

创建项目目录

mkdir或者新建空文件夹,例如文件夹叫hello

启动Visual Studio Code

这一步是关键所在,众所周知,在linux和mac下gcc或者clang都是直接可以在全新的shell中敲指令的,但是在windows powershell/cmd 中,MSVC的编译器无法直接使用,因为MSVC是一套相当复杂的环境,配置文件一堆,有茫茫多的环境变量,因而若要使用MSVC的编译器,需要事先导入其环境变量(NB)。
省事的步骤是添加系统环境变量,但VS官方不推荐,想必也是有原因的,因此VS提供了一个环境变量脚本,用于启动带有环境变量的cmd。(这里需要知道一点,每一个cmd控制台的环境变量可以不同,是单独存在的,但是继承了系统和用户的环境变量)
。。。
扯了一堆,做法有两种:

  1. 在Windows搜索框中键入”Develop”,会出来如下图所示:
    点击即可启动控制台。
  2. 如果找不到,去VS安装目录下,例如D:\Program Files (x86)\Microsoft Visual Studio\2019\Community\Common7\Tools 下,找到VsDevCmd.bat,在此启动控制台,并运行这个文件即可。

启动后界面如下;

vscoce自动打开微信开发者工具 vscode 开发_windows

在控制台中输入

code

即可启动vscode,如果提示code命令找不到,需添加vscode安装目录至系统环境变量PATH中,重新启动。(添加环境变量不在此赘述)

配置文件

先松一口气,checkpoint一下,到目前为止,需要通过MSVC环境启动vscode,并打开我们的项目目录,如图所示:

vscoce自动打开微信开发者工具 vscode 开发_Visual_02


检查环境变量是否导入:

点击终端–新建终端,输入

echo $env:INCLUDE

如果能见到一大堆东西,则导入成功!
下一步是配置文件

1. C/C++配置

按F1,输入configuration,找到C/C++:编辑配置(json),如下图

vscoce自动打开微信开发者工具 vscode 开发_windows_03


会在项目文件夹下生成.vscode目录和一个json文件,并进入到json文件中,如下图

vscoce自动打开微信开发者工具 vscode 开发_c++_04


需要修改两处地方:

"includePath": [
                "${workspaceFolder}/**",
                "${env:INCLUDE}",
            ],
"compilerPath": "D:\\Program Files (x86)\\Microsoft Visual Studio\\2019\\Community\\VC\\Tools\\MSVC\\14.25.28610\\bin\\Hostx86\\x86\\cl.exe"

其中编译器路径compilerPath有两种写法,一种是改为上述VS目录,另一种是直接删掉。

2. task配置

task配置任务,主要是生成任务和测试任务,当然还可以有clear等等

按F1,输入build,找到编辑默认生成任务,点击,选择使用模板创建json–Others(有cl更好),会创建tasks.json,如下图

vscoce自动打开微信开发者工具 vscode 开发_windows_05


修改tasks配置如下:

...
"tasks": [
        {
            "label": "build debug Win32",
            "type": "process",
            "command": "cl",
            "args": ["/Zi", "/Od", "/EHsc"],
            "group": "build",
            "problemMatcher": [
                "$msCompile"
            ]
        }
    ]

暂时不管他了,下一步再说

3. launch配置

按F5,在弹出界面中选择C++(Windows)

vscoce自动打开微信开发者工具 vscode 开发_Visual_06


生成launch,json,如图所示

vscoce自动打开微信开发者工具 vscode 开发_visual studio_07


至此,配置文件篇结束,当然下一步会针对具体的项目修改。

Build & Debug

终于到了最后一个checkpoint了,在这里构建两个项目,第一个是helloworld,第二个是多文件的add。

1. HelloWorld

创建文件夹src,编写main.cpp

#include <iostream>

using namespace std;

int main(){
    cout << "HelloWorld!" << endl;
    return 0;
}

目录结构如图所示

vscoce自动打开微信开发者工具 vscode 开发_visual studio_08


创建文件夹bin

创建文件夹obj\msvc

创建文件夹build\msvc,创建文件Debug,输入以下内容

/Fe:"bin\hello" /MTd src\main.cpp

再次来到tasks.json,修改配置文件的args如下

"args": ["@build/msvc/Debug", "/Fo:obj\\msvc\\", "/Zi", "/Od", "/EHsc"],

当然,看着不舒服可以换行写。

此时目录结构如图所示

vscoce自动打开微信开发者工具 vscode 开发_c++_09


来到launch.json,修改配置文件如下:

"program": "${workspaceFolder}/bin/hello.exe",

至此,配置步骤完成,按ctrl+shift+B或者F1,输入build运行生成任务

vscoce自动打开微信开发者工具 vscode 开发_Visual_10


打个断点,按F5

vscoce自动打开微信开发者工具 vscode 开发_Visual_11


结束。

2. 多文件的Add

在src目录下新建文件add.cpp,add.h
add.h

int add(int a, int b);

add.cpp

#include "add.h"
int add(int a, int b){
    return a + b;
}

main.cpp

#include "add.h"

#include <iostream>

using namespace std;

int main(){
    cout << add(1,2) << endl;
    return 0;
}

来到build\msvc\Debug文件,修改为

src\add.cpp 
/Fe:"bin\hello" /MTd src\main.cpp

ctrl + shift + B一下,F5

vscoce自动打开微信开发者工具 vscode 开发_windows_12


3没错

结束。

到此为止,vscode简陋的MSVC运行环境就搭好了,关于cl编译器的使用方法参考MSDN

优化配置

这一步可有可无,不过为了方便期间,建议配置一下。

1.clear任务

配置tasks.json,新增一个任务

{
            "label": "clear",
            "type": "shell",
            "command": "rm",
            "args": ["obj/msvc/*,", "bin/*,", "*.pdb", "-Force"],
            "group": "none",
            "problemMatcher": []
        },

清理msvc项目生成的一切东西。最后*.pdb文件是由于会生成符号调试文件v140.pdb,暂时没找到解决方法。

2. 启动脚本

什么?每次启动都必须找Developer Command Prompt for VS?怕麻烦的我决定想想办法。
又注意到在编译过程中出现了这么一句话

用于 x86 的 Microsoft (R) C/C++ 优化编译器 19.25.28610.4 版

那么问题来了,x64怎么办?

一顿搜索发现了这个东西

vscoce自动打开微信开发者工具 vscode 开发_vscoce自动打开微信开发者工具_13


有救了,首先在vscode中保存工作区在项目根目录下(取个名字hello)

vscoce自动打开微信开发者工具 vscode 开发_vscoce自动打开微信开发者工具_14

vscoce自动打开微信开发者工具 vscode 开发_c++_15


在项目根目录下新建文件vscode.bat和vscode64.bat

vscode.bat

call "D:\Program Files (x86)\Microsoft Visual Studio\2019\Community\Common7\Tools\VsDevCmd.bat"
code .\hello.code-workspace
exit

vscode64.bat

call "D:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build\vcvars64.bat"
code .\hello.code-workspace
exit

注意修改VS的安装目录,本人安装在D盘。现在的目录结构如下:

vscoce自动打开微信开发者工具 vscode 开发_Visual_16


保存,退出,运行vscode64.bat

vscoce自动打开微信开发者工具 vscode 开发_visual studio_17


build一下,发现了这句话

vscoce自动打开微信开发者工具 vscode 开发_vscoce自动打开微信开发者工具_18


搞定。

后记:

关于编译器的使用,cl,gcc,clang等肯定有所不同,需要经过更多实践,也可以选择不用编译器,使用make、msbuild、Cmake等等工具辅助构建,但那又是另外一个故事了。

参考文献

[1] code官方教程: https://code.visualstudio.com/docs/cpp/config-msvc [2] cl参数: https://docs.microsoft.com/en-us/cpp/build/reference/compiler-options-listed-by-categoryc
[3] cl Command File: https://docs.microsoft.com/en-us/cpp/build/reference/cl-command-files