darknet框架 VS2017 平台工具集141_VS2019新特性:可以切换编译工具集啦

朋友们,在开发中你是否有这样的经历:辛辛苦苦,在CodeProject/Github上找到一个合适的开源代码工程,下载下来用VS打开,编译时VS提示: This toolset may be unknown or missing。然后你并没有因此而沮丧,你点燃了一根烟,动了动手指头,将Platform Toolset切换到当前已安装的版本,重新编译,VS告诉你:0个错误,0个警告。没错,一切都是那么美好。

美好的东西可不止这些,可能还有更多。

就比如,近日,VS开发团队Will老哥给我们分享了VS2019的一些有关于工具集切换的更新,让我们来看看是咋回事。

从VS2019 v16.1 Preview 3开始,v142版本的MSVC工具集的小版本并排安装就开始正式启用了。

而早在VS2017那会,VS就开始试水工具集的小版本并排安装特性,而在最新的VS2019中,有一些小的改变需要让各位朋友知道。

通常来说,作为开发者,我们并不需要关心所谓的”小版本”工具集。这个特性主要使用在这样的场景:代码中有Bug,或者MSVC本身有Bug,但是又不能合理的绕开,这个时候,小版本工具集就能起到作用了(也就是所谓的:惹不起,我躲得起)。

安装小版本工具集

VS2017和VS2019最大的区别之一在于它们对小版本工具集的分解方式。从VS2019开始,开发团队开始从架构这一层面对工具集进行了分离,同时也包括小版本的工具集。值得注意的是,VS2017那个时候,只有一个小版本工具集可供安装,到了2019的时候,我们就可以安装我们想要的针对所有不同平台的工具集了。

在VS安装包中,当我们选择”Desktop C++ Developement” Workload时,系统将自动安装最新版本的工具集。如果我们想要安装其他的版本,可以在”individual components”页面进行选择,具体来说,是在”Compilers, build tools, and runtimes”下,我们可以看到所有不同版本的MSVC工具集,包括那些小版本的。

举个栗子。我们可以看到对应于”MSVC v142″的小版本”(v14.20)”和”(v14.21)”。在最新版本中,我们还将看到”(v14.22)”和”(v14.23)”。

604c8a867373c83c1b3b805b0c660736.png

使用小版本工具集

当你使用C++ MSBuild来编译你的工程时,使用MSVC小版本工具集的方法和之前一样,没有任何改变。

注意了,小版本的工具集在默认情况下,并不会出现在项目属性的”Platform Toolset”选项下。如果希望启用,则需要编辑你的项目文件(vcxproj)。每一个并排安装的小版本工具集都包含一个.props后缀的文件,这些props文件可以被包含到项目的vcxproj文件中。

在开始做我们的实验之前,我们可以打开编译详细输出,用来观察编译时使用的编译器版本信息。可以在编译命令行添加”-Bv”选项开启,如下图所示:

8ac57cfddf478d3051997d4c53394324.png

然后,打开”VCAuxiliaryBuild14.20″目录(这个目录也是VS2019 v16.1 Preview 3的安装目录)时,可以看到有三个文件,将这三个文件中的”Microsoft.VCToolsVersion.14.20.props”拷贝至解决方案目录。

c4e24f349a4a79986ebd0e6512f27853.png

通过右键点击解决方案,点击”Open Folder in File Explorer”的方法来打开解决方案目录。

1d0968943dd26b4af0d4c1ad181d197d.png

将”Microsft.VCToolsVersion.14.20.props”拷贝至解决方案目录后,这个props文件将和解决方案Sln文件在同一目录下,如下图所示:

2c35590ba3951bab07e1fe5aa4284017.png

接下来,在VS中将工程卸载,然后就可以编辑工程文件了。在工程文件中,找到如下的语句:

4c98cfee4a564f8388003a5acd480613.png

在上面的语句上方(有点绕啊),添加一条import语句,如下:

39bae4e05793f61c42fd7db89816df1f.png

最后,保存工程文件,然后加载项目。至此,我们就可以重新构建工程,然后从构建日志中,可以看到我们使用的是14.20版本的MSVC编译工具集了。

在CMake中使用小版本工具集

除了VS MSBuild项目,我们还可以在VS的CMake项目中无缝的使用这些工具集。我们需要在CMakeSetting文件中新建一个”VCToolsVersion”的环境变量,然后设置想要使用的版本号,例如”14.20″。可以直接打开CMake Settings对应的JSON文件进行修改。

请注意了,在编译之前,还需要删除之前的缓存,方法为:在”Project > CMake > Cache > Delete Cache”中删除缓存,然后在”Project > Generate Cache”中重新生成一次。为了验证CMake是否使用了正确的工具集,可以在编译输出窗口中观察编译日志。

45c2e2ce858f03a1d5003cd490f15b56.png

在命令行中使用小版本工具集

如果不想在VS中配置,也可以通过配置命令行的方式来使用小版本工具集。VS的命令行编译工具位于VS2019 v16.1 Preview3的安装目录,例如:C:Program Files (x86)Microsoft Visual StudioPreviewEnterpriseVCAuxiliaryBuild directory。

在这个文件夹中,我们可以看到有4个命令行批处理文件(vsvars*.bat),从中选择任意一个,拷贝一份并进行修改。这些文件内容比较简单,它们直接调用vcvarsall.bat这个文件,区别在于使用了不同的架构参数。按照这个原理,我们可以添加一个新的参数:-vcvars_ver=14.20,来实现对特定版本工具集的调用。

同上,可以通过执行”cl -Bv”来判断编译过程是否使用了正确的版本。

总结

个人来说,本文的配置过程是比较繁琐的,我觉得一部分原因可能是:这个特性使用的人比较少。

但是,俗话说得好:有总比没有好(还挺押韵)。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值