命令⾏编译_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)”。
使⽤⼩版本⼯具集
当你使⽤C++ MSBuild来编译你的⼯程时,使⽤MSVC⼩版本⼯具集的⽅法和之前⼀样,没有任何改变。
注意了,⼩版本的⼯具集在默认情况下,并不会出现在项⽬属性的”Platform Toolset”选项下。如果希望启⽤,则需要编辑你的项⽬⽂件(vcxproj)。每⼀个并排安装的⼩版本⼯具集都包含⼀个.props后缀的⽂件,这些props⽂件可以被包含到项⽬的vcxproj⽂件中。
在开始做我们的实验之前,我们可以打开编译详细输出,⽤来观察编译时使⽤的编译器版本信息。可以在编译命令⾏添加”-Bv”选项开启,如下图所⽰:
然后,打开”VCAuxiliaryBuild14.20″⽬录(这个⽬录也是VS2019 v16.1 Preview 3的安装⽬录)时,可以看到有三个⽂件,将这三个⽂件中的”Microsoft.VCToolsVersion.14.20.props”拷贝⾄解决⽅案⽬录。
通过右键点击解决⽅案,点击”Open Folder in File Explorer”的⽅法来打开解决⽅案⽬录。
将”Microsft.VCToolsVersion.14.20.props”拷贝⾄解决⽅案⽬录后,这个props⽂件将和解决⽅案Sln⽂件在同⼀⽬录下,如下图所⽰:
接下来,在VS中将⼯程卸载,然后就可以编辑⼯程⽂件了。在⼯程⽂件中,到如下的语句:
在上⾯的语句上⽅(有点绕啊),添加⼀条import语句,如下:
最后,保存⼯程⽂件,然后加载项⽬。⾄此,我们就可以重新构建⼯程,然后从构建⽇志中,可以看到我们使⽤的是14.20版本的MSVC编译⼯具集了。
在CMake中使⽤⼩版本⼯具集
除了VS MSBuild项⽬,我们还可以在VS的CMake项⽬中⽆缝的使⽤这些⼯具集。我们需要在CMakeSetting⽂件中新建⼀
个”VCToolsVersion”的环境变量,然后设置想要使⽤的版本号,例如”14.20″。可以直接打开CMake Settings对应的JSON⽂件进⾏修改。visual studio和vs code的区别
请注意了,在编译之前,还需要删除之前的缓存,⽅法为:在”Project > CMake > Cache > Delete Cache”中删除缓存,然后
在”Project > Generate Cache”中重新⽣成⼀次。为了验证CMake是否使⽤了正确的⼯具集,可以在编译输出窗⼝中观察编译⽇志。
在命令⾏中使⽤⼩版本⼯具集
如果不想在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”来判断编译过程是否使⽤了正确的版本。
总结
个⼈来说,本⽂的配置过程是⽐较繁琐的,我觉得⼀部分原因可能是:这个特性使⽤的⼈⽐较少。
但是,俗话说得好:有总⽐没有好(还挺押韵)。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。