Windows配置VSCode+CMake+Ninja+Boost.Test的C++开发环境(教程详解)

2020-05-12 11:57:48于海丽
C:Program Files (x86)Microsoft Visual Studio2019CommunityVCAuxiliaryBuildvcvars64.bat 这个脚本。该脚本的作用是把MSVC和Windows SDK的包含路径、库路径等添加到环境变量,然后打开一个cmd命令行。所以在这个cmd运行期间能够直接检测到编译C++所需的所有依赖项。

我们可以试着在这个cmd当中输入 SET ,查看已经生效的所有环境变量。

利用这些信息,我们在常规的cmd或PowerShell里也能正常编译C++代码。具体的过程会在后面介绍。

默认cmd的字体有点难看,我个人习惯在Windows Terminal 里面开一个cmd终端,然后执行下面的命令:

> "C:Program Files (x86)Microsoft Visual Studio2019CommunityVCAuxiliaryBuildvcvars64.bat"

这就可以让我们的新终端也能够检测到MSVC环境,如下图所示。

编译Boost

然后, cd 到Boost的根目录,执行下面的命令:

> bootstrap.bat
> b2 --prefix=build install

等待编译完成之后,在 buildlib 目录下会出现一大堆 .lib 文件,我们只会用到 libboost_unit_test_framework-vc142-mt-gd-x64-1_73.lib 这一个文件。

当然,如果只想编译单元测试模块,可以用下面的命令:

> b2 address-model=64 architecture=x86 
--with-test link=static --prefix=build install

命令行编译和测试

这里我们先在命令行里编译C++项目,并运行单元测试。 cd 到项目目录下,然后执行以下命令:

> mkdir build
> cd build
> cmake -G "Ninja" ..
> ninja test_main
> test_main.exe

在Windows平台上,生成工具可以选择VS提供的NMAKE,也可以用Ninja。微软的NMAKE类似于Linux平台的make工具。按照这个 视频 的介绍,Ninja的编译速度要比NMAKE快一些。

可以发现,在 vcvars64.bat 所提供的环境下,使用的是VS所安装的CMake和Ninja,版本号比我们自己安装都要老一些。下面我们介绍如何在VS Code中配置C++的编译和测试环境。

配置VS Code

settings.json

打开VS Code的设置,在 settings.json 中添加下面几行内容,可以起到类似 vcvars64.bat 的作用:

{
 "terminal.integrated.shell.windows": "C:WindowsSystem32cmd.exe",
 "terminal.integrated.env.windows": {
 "PATH" : "C:Program Files (x86)Microsoft Visual Studio2017CommunityVCToolsMSVC14.16.27023binHostx64x64;C:Program Files (x86)Windows Kits10bin10.0.18362.0x64;E:CMakebin;E:dev-libninja",
 "INCLUDE": "C:Program Files (x86)Microsoft Visual Studio2017CommunityVCToolsMSVC14.16.27023include;C:Program Files (x86)Windows Kits10Include10.0.18362.0ucrt",
 "LIB": "C:Program Files (x86)Microsoft Visual Studio2017CommunityVCToolsMSVC14.16.27023ATLMFClibx64;C:Program Files (x86)Microsoft Visual Studio2017CommunityVCToolsMSVC14.16.27023libx64;C:Program Files (x86)Windows Kits10lib10.0.18362.0ucrtx64;C:Program Files (x86)Windows Kits10lib10.0.18362.0umx64"
 },
 "cmake.cmakePath": "E:CMakebincmake.exe"
}