由于最近的学习需求,折腾起了vscode,毕竟是跨平台,对以后项目的拓展也很方便。至于为什么不用mingw, tdm-gcc一类,主要因为毕竟是Windows平台,使用自家的MSVC开发环境一来可以放心,少出BUG,二来能够增强Windows上其他自家库的拓展性(例如DX,Windows SDK),三来VS着实臃肿,启动较慢,用vscode牺牲功能换取效率,在学习过程中还是比较值得的(SSD请回避)。
总的来说,配置过程头皮发麻,错误百出,查阅了不少资料,将目前的所得暂且记下,作为备忘。
总体步骤
总算折腾出了Hello World 和 1+2=3,总体步骤说起来也就那么几步,如下:
- 安装Visual Studio 构建工具
- 安装Visual Studio Code和C++插件
- 创建项目目录
- 启动Visual Studio Code
- cpp配置文件
- 运行配置文件
- 任务配置文件
- build & debug
- 优化启动配置
安装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控制台的环境变量可以不同,是单独存在的,但是继承了系统和用户的环境变量)
。。。
扯了一堆,做法有两种:
- 在Windows搜索框中键入”Develop”,会出来如下图所示:
点击即可启动控制台。 - 如果找不到,去VS安装目录下,例如D:\Program Files (x86)\Microsoft Visual Studio\2019\Community\Common7\Tools 下,找到VsDevCmd.bat,在此启动控制台,并运行这个文件即可。
启动后界面如下;
在控制台中输入
code
即可启动vscode,如果提示code命令找不到,需添加vscode安装目录至系统环境变量PATH中,重新启动。(添加环境变量不在此赘述)
配置文件
先松一口气,checkpoint一下,到目前为止,需要通过MSVC环境启动vscode,并打开我们的项目目录,如图所示:
检查环境变量是否导入:
点击终端–新建终端,输入
echo $env:INCLUDE
如果能见到一大堆东西,则导入成功!
下一步是配置文件
1. C/C++配置
按F1,输入configuration,找到C/C++:编辑配置(json),如下图
会在项目文件夹下生成.vscode目录和一个json文件,并进入到json文件中,如下图
需要修改两处地方:
"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,如下图
修改tasks配置如下:
...
"tasks": [
{
"label": "build debug Win32",
"type": "process",
"command": "cl",
"args": ["/Zi", "/Od", "/EHsc"],
"group": "build",
"problemMatcher": [
"$msCompile"
]
}
]
暂时不管他了,下一步再说
3. launch配置
按F5,在弹出界面中选择C++(Windows)
生成launch,json,如图所示
至此,配置文件篇结束,当然下一步会针对具体的项目修改。
Build & Debug
终于到了最后一个checkpoint了,在这里构建两个项目,第一个是helloworld,第二个是多文件的add。
1. HelloWorld
创建文件夹src,编写main.cpp
#include <iostream>
using namespace std;
int main(){
cout << "HelloWorld!" << endl;
return 0;
}
目录结构如图所示
创建文件夹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"],
当然,看着不舒服可以换行写。
此时目录结构如图所示
来到launch.json,修改配置文件如下:
"program": "${workspaceFolder}/bin/hello.exe",
至此,配置步骤完成,按ctrl+shift+B或者F1,输入build运行生成任务
打个断点,按F5
结束。
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
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怎么办?
一顿搜索发现了这个东西
有救了,首先在vscode中保存工作区在项目根目录下(取个名字hello)
在项目根目录下新建文件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盘。现在的目录结构如下:
保存,退出,运行vscode64.bat
build一下,发现了这句话
搞定。
后记:
关于编译器的使用,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